this引用逸出

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
如有問題,請留言,感激不盡。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章