zoukankan      html  css  js  c++  java
  • notify wait Object

    notify()及notifyAll()是Object的方法,与Object的wait()方法配合使用,而且这三个方法必须在同步块中调用.  
       
      如下:  
      在线程1中执行如下代码  
      ...  
      synchronized(obj1)             //1.进入同步块  
      {  
              try   {  
              ...  
              obj1.wait();                 //2.进入暂停状态  
              }catch   (InterruptedException   exp)   {}  
      }  
       
      1.当前同步对象(monitor)为obj1,obj1是任一实例,若是同步方法,则同步对象是this.进入同步块后,obj1为锁定状态,锁定状态 对obj1本身无任何影响,而其它线程执行到同一代码时,因不能获得锁,处于Block状态,一旦解锁,被block的线程自动继续执行.  
      2.调用obj1.wait()有两个作用,一是使线程进入等待状态,二是解锁obj1,这时被block的线程将获得锁.线程1要退出等待必须要由其它线程显式的调用obj1.notify()或notifyAll()方法.  
       
      如  
       
      ...  
      synchronized(obj1)  
      {  
              ...  
              obj1.notify();         //3.   向wait的线程发通知信息  
              ...  
      }  
      ...  
       
      若其它线程执行到此时,线程1处于wait状态,则wait状态解除,解除后,若线程1若得到锁就能继续执行,若有多个线程处于obj1的wait状态,notify将随机选一个线程激活,而notifyAll是同时解除所有的wait状态.  

       

    如果在同步块入口点阻塞,不须其它线程调用notify(),调了也没效果,同步块能自动获得锁  
       
      如果是wait造成了阻塞,须用notfiy()激活,这两个方法是配合使用   

  • 相关阅读:
    输出菱形
    for语句输出三角形
    阶乘倒数的和
    变量赋值判断奇偶
    928作业
    各种主流数据库的比较(所以说我觉得Oracle这个keng?入的不错?)
    Oracle创建表
    (转载)全球唯一标识GUID
    (转载)Java基础知识总结
    两天以来对plsqldev操作的记忆
  • 原文地址:https://www.cnblogs.com/baoguo/p/1311352.html
Copyright © 2011-2022 走看看