为什么wait()
位于同步块内?我的意思是,只有一个线程会进入synchronized块,那么另一个线程如何执行wait()
指令呢?
答案 0 :(得分:2)
示例:
public class ThreadA {
public static void main(String[] args){
ThreadB b = new ThreadB();
b.start();
synchronized(b){
try{
System.out.println("Waiting for b to complete...");
b.wait();
}catch(InterruptedException e){
e.printStackTrace();
}
System.out.println("Total is: " + b.total);
}
}
}
class ThreadB extends Thread{
int total;
@Override
public void run(){
synchronized(this){
for(int i=0; i<100 ; i++){
total += i;
}
notify();
}
}
}
来自:http://www.programcreek.com/2009/02/notify-and-wait-example/
答案 1 :(得分:0)
Why is wait() inside of a synchronized block?
因为线程需要使用您正在调用wait()
的对象的监视器,对于同步方法,需要this
对象。
I mean, only one thread will enter the synchronized block, so how can the other
thread execute the wait() instruction?
它不能,只有synchronized块内的线程可以执行wait()
,允许其他线程进入同步块。