将 wait()、notify() 方法放入 Object 类背后的概念
我只是很难理解上课背后的概念。为了这个问题,考虑是否和在课堂上。wait()
Object
wait()
notifyAll()
Thread
class Reader extends Thread {
Calculator c;
public Reader(Calculator calc) {
c = calc;
}
public void run() {
synchronized(c) { //line 9
try {
System.out.println("Waiting for calculation...");
c.wait();
} catch (InterruptedException e) {}
System.out.println("Total is: " + c.total);
}
}
public static void main(String [] args) {
Calculator calculator = new Calculator();
new Reader(calculator).start();
new Reader(calculator).start();
new Reader(calculator).start();
calculator.start();
}
}
class Calculator extends Thread {
int total;
public void run() {
synchronized(this) { //Line 31
for(int i=0;i<100;i++) {
total += i;
}
notifyAll();
}
}
}
我的问题是,它本可以产生什么不同?在第 9 行中,我们在对象 c 上获取锁,然后执行等待,这满足等待条件,即在使用 wait 之前,我们需要在对象上获取锁,因此对于 notify 也是如此,我们在第 31 行的计算器对象上获取了锁。