An owner object may be passed when the listener is implemented using an
(anonymous) inner class. In that case the owner object should be the
enclosing object of the listener object, and this is used to bind the
lifetime of the listener. To avoid the owner object from not being
garbage collected when it is no longer used, only the owner object will
add a reference to the listener, while the signal will use a weak
reference.

This avoids the most common reason for memory leaks in Java
implementations of the Observer pattern: the owner object will not get
garbage collected because of the (anonymous) listener object having a
reference to it, even if the receiver object is no longer referenced from
anywhere. When the owner object is not null, the listener is
stored using a strong reference in the owner object, and using a weak
reference in the signal.