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 ,
}
}
}
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 ,
}
}
}