SCJP試験の準備をしていますが、同期を完全に理解するのに問題があります。6行目で、mainで実行されているスレッドには「b」のロックが必要であることを読みました。なぜこのオブジェクトをロックする必要があるのですか?私の理解では、同期されたコードブロックは、常に1つのスレッドのみが入ることができる保護された領域ですか?次に進むと、mainのスレッドはこのロックを解放し、'bのスレッドがrunメソッドを完了するのを待ちます。'b'のスレッドは、メインのスレッドに完了したことを通知することを意味します。ただし、ここで特定のスレッドに通知しているようには見えません。この例は、Sierra andBatesSCJPの本からのものです。これに当てることができるどんな光でもありがたいです。ありがとう
class ThreadA {
public static void main(String [] args) {
ThreadB b = new ThreadB();
b.start();
**synchronized(b) { //line 6**
try {
System.out.println("Waiting for b to complete...");
b.wait();
} catch (InterruptedException e) {}
System.out.println("Total is: " + b.total);
}
}
}
}
class ThreadB extends Thread {
int total;
public void run() {
System.out.println("K");
synchronized(this) {
for(int i=0;i<100;i++) {
total += i;
}
notify();
}
}
}