Allowing the this reference to escape

concurrency, java

Solution

It means calling code outside the class, and passing `this`. That code will assume that the instance is fully initialized, and may break if it isn't. Similarly, your class might assume that some methods will only be called after the instance is fully initialized, but the external code is likely to break those assumptions.

`final` methods cannot be overridden, so you can trust them to not pass `this` around. If you call any non-`final` method in the constructor for a non-`final` class, a derived class might override that method and pass `this` anywhere. Even when you call `final` methods, you still need to make sure that they are safely written – that they do not pass `this` anywhere, and that themselves don't call any non-`final` methods.

Problem

I would appreciate help in understanding the following from 'Java Concurrency in Practice': Calling an overrideable instance method(one that is neither private nor final) from the constructor can also allow the this reference to escape. - Does 'escape' here simply mean that we may probably be calling an instance method,before the instance is fully constructed? I do not see 'this' escaping the scope of the instance in any other way. - How does 'final' prevent this from happening?Is there some aspect of 'final' in instance creation that I am missing?

Original source