this pointer escape in Java

Tags: ,



When reading < Java Concurrency in Practice >, there’s an example saying that the following code snippet will lead to this pointer escape in the constructor method. But I’m not sure what exactly does it mean, since I couldn’t see any this reference in the source code of ThisEscape constructor method. Any ideas? Thanks.

public class ThisEscape {
    public ThisEscape(EventSource source)   {
        source.registerListener(
            new EventListener() {
                public void onEvent(Event e)    {
                    doSomething(e);
                }
            }
        );
    }
}

Answer

EventListener object is created from an anonymous class and will have access to ThisEscape.this reference. Because of that the this pointer “escapes” the scope of the class it belongs to and will be accessible in other places like EventListener.

Even worse this whole thing happens before ThisEscape is fully constructed so the doSomething() method can potentially be called before the constructor finishes if the event is dispatched and handled by another thread.



Source: stackoverflow