これらのクラスは、同じファイルで定義されています。出力は何ですか?(正解は1つ)
class Job extends Thread {
private Integer number = 0;
public void run() {
for (int i = 1; i < 1000000; i++) {
number++;
}
}
public Integer getNumber() {
return number;
}
}
public class Test {
public static void main(String[] args)
throws InterruptedException {
Job thread = new Job();
thread.start();
synchronized (thread) {
thread.wait();
}
System.out.println(thread.getNumber());
}
}
- 0 を出力します。
- 999999 と表示されます。
- 出力が上記のいずれかになることは保証されません。
出力は999999
です。run()
スレッドがそのメソッドを完了すると終了し、スレッドが持っていたすべてのロックが解放されることを理解しています。ただし、この演習では Thread オブジェクトをロックとして使用していますが、これは通常のオブジェクトと見なすべきではないでしょうか。thread
スレッドではなくメインスレッドが所有するロックを意味します。