this引用逸出:某个对象在初始化的时候发布自己这个对象。即,当前对象在初始化完成之前,给其它线程提供了引用。若其它线程先跑,则可能报错。
下面是《java并发编程实践》给出的实例:
public class ThisEscape {
public ThisEscape(EventSource source){
source.registerListner(new EventListner() {
public void onEvent(Event e){
doSomething(e);
}
});
}
void doSomething(Event e) {
}
interface EventSource {
void registerListner(EventListner e);
}
interface EventListner {
void onEvent(Event e);
}
interface Event {
}
}
书中给的更改:
public class ThisNotEscape {
private final EventListner listner;
public ThisNotEscape() {
listner = new EventListner() {
public void onEvent(Event e) {
doSomething(e);
}
};
}
public static ThisNotEscape newInstance(EventSource source){
ThisNotEscape thisNotEscape=new ThisNotEscape();
source.registerListner(thisNotEscape.listner);
return thisNotEscape;
}
void doSomething(Event e) {
}
interface EventSource {
void registerListner(EventListner e);
}
interface EventListner {
void onEvent(Event e);
}
interface Event {
}
}
总结:简单的来说,对象的使用应在其实例化之后。
转载于:https://blog.csdn.net/more_try/article/details/86742767
如有问题,请留言,感激不尽。