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){ }
System.out.println("Total is : " +b.total);
}
}
}class ThreadB extends Thread{
int total;
public void run(){
synchronized(this){
for(int i = 0;i<100;i++){
total+=i;
}
notify();
}
}
}请问代码里的b.wait()和notify()有什么意义吗?
b.start()这句执行之后关于计算的代码不是应该已经完成了吗?为什么还可以wait?
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){ }
System.out.println("Total is : " +b.total);
}
}
}class ThreadB extends Thread{
int total;
public void run(){
synchronized(this){
for(int i = 0;i<100;i++){
total+=i;
}
notify();
}
}
}请问代码里的b.wait()和notify()有什么意义吗?
b.start()这句执行之后关于计算的代码不是应该已经完成了吗?为什么还可以wait?
其实,如果只有一个子线程,主线程可以不管。因为系统会自动等待所有普通线程完成。
如果你为了等待某个线程,可以用join。
wait()和notify()是Object里面的方法,wait()是 在其他线程调用此对象的 notify() 方法或 notifyAll() 方法前,导致当前线程等待。而notify()唤醒在此对象监视器上等待的单个线程,至于唤醒那个事随即的,至于为什么要使用这两个函数可以看一下生产者与消费者的例子
b.start()这句执行之后关于计算的代码不是应该已经完成了吗?为什么还可以wait?
main方法也是一个线程,主线程和ThreadB是交替执行的
如果子线程先锁定对象。子线程执行结束后唤醒这个对象上等待这的线程(现在没有),释放锁。主线程得到锁运行,wait了就一直wait了,没有人来唤醒他。
不是让b等待。