this引用逸出demo
在看《Java 并发编程实践》时,有以下这个例子,说下边的this会逸出,说的太模糊,不理解。
public class ThisEscape {
public ThisEscape(EventSource source) {
source.registerListener(new EventListener() {
public void onEvent(Event e) {
doSomething(e);
}
});
}
void doSomething(Event e) {
}
interface EventSource {
void registerListener(EventListener e);
}
interface EventListener {
void onEvent(Event e);
}
interface Event {
}
}
于是,直降做了下demo:
public class demo_02_ThisEscape {
public static void main(String[] arge) {
new ThisEscape(new ThisEscape.EventSource(){
@Override
public void registerListener(ThisEscape.EventListener e) {
System.out.println(e);
// 结果: java_thread.ThisEscape$1@470e2030
}
});
num = 100;
}
}
class ThisEscape {
int num = 0;
public ThisEscape(EventSource source) {
source.registerListener(new EventListener() {
public void onEvent(Event e) {
doSomething(e);
}
});
}
void doSomething(Event e) {
}
interface EventSource {
void registerListener(EventListener e);
}
interface EventListener {
void onEvent(Event e);
}
interface Event {
}
}
只用代码和输出还是不好理解,但是如果debug状态
可以看到线程状态里,有包含ThisEscape的进程,同时,查看内部registerListener的参数ThisEscape.EventListener e的,可以看到ThisEscape的内部对象num。但实际上,这个时候还在ThisEscape的构造内部,ThisEscape实例化没有完成,num还是0的状态。
构造和线程可能冲突。
这大概就是this逸出吧。