Java同時プログラミングのthis逃走問題


概要


this脱出とは、コンストラクション関数が戻る前に他のスレッドがそのオブジェクトの参照を持つことを意味する.まだ完全に構成するオブジェクトを呼び出す方法は、疑わしいエラーを引き起こす可能性があるため、this逃走の発生を避けるべきである.
この脱出は、コンストラクション関数でスレッドを起動したり、リスナーを登録したりするときによく発生します.
public class ThisEscape {
	public ThisEscape() {
		new Thread(new EscapeRunnable()).start();
		// ...
	}
	
	private class EscapeRunnable implements Runnable {
		@Override
		public void run() {
			//  ThisEscape.this ,  ,  this 
		}
	}
}

解決策

public class ThisEscape {
	private Thread t;
	public ThisEscape() {
		t = new Thread(new EscapeRunnable());
		// ...
	}
	
	public void init() {
		t.start();
	}
	
	private class EscapeRunnable implements Runnable {
		@Override
		public void run() {
			//  ThisEscape.this ,  
		}
	}
}