Java Concurrency in practice 笔记
何为Escape, 类的成员变量理应不暴露给其他对象,但是却因为某些公有函数暴露出去了,这样就叫做Escape。
接下来列举一些例子:
1.
2.?把内部类EventListener通过方法registerListener传给了source对象。source可能会在registerListener方法中通过内部类EventListener拿到ThisEscape的地址,并进行操作,这个时候就可能会有错误,因为这个时候ThisEscape还没有完全实例化。
public class SafeListener { private final EventListener listener; private SafeListener() { listener = new EventListener() { public void onEvent(Event e) { doSomething(e); } }; } public static SafeListener newInstance(EventSource source) { SafeListener safe = new SafeListener(); source.registerListener(safe.listener); return safe; }}??