美文网首页
21,线程8-线程的交互

21,线程8-线程的交互

作者: 旅程中 | 来源:发表于2018-10-12 14:13 被阅读2次

线程的交互
/**

  • 计算输出其他线程锁计算的数据
    */
public class ThreadA {  
    public static void main(String[] args) {  
       ThreadB b=new ThreadB();  
       //启动计算线程  
       b.start();  
       //线程A拥有b对象上的锁。线程为了调用wait()或notify()方法,该线程必须是那个对象锁的拥有者  
       synchronized (b) {  //这里传入b对象,只是为了调用b对象的wait方法,等着b线程执行完
           try {  
              System.out.println("等待对象b完成计算......");  
              b.wait();  
           } catch (InterruptedException e) {  
              e.printStackTrace();  
           }  
           System.out.println("b对象计算的总和是:" + b.total);  
       }  
    }  
}  
/** 
 * 计算1+2+3+...+100的和 
 */  
public class ThreadB extends Thread {  
    int total;  
    public void run(){  
       synchronized (this) {  
           for (int i=0;i<101;i++){  
              total+=i;  
           }  
           //(完成计算了)唤醒在此对象监视器上等待的单个线程,在本例中线程A被唤醒  
           notify();  
       }  
    }  
}  
    执行结果:
等待对象b完成计算......  
b对象计算的总和是:5050  

调用wait方法的线程,不会自己唤醒,需要线程调用 notify / notifyAll 方法唤醒等待池中的所有线程,才会进入就绪队列中等待系统分配资源。

Wait和join用法差不多

相关文章

网友评论

      本文标题:21,线程8-线程的交互

      本文链接:https://www.haomeiwen.com/subject/obfgaftx.html