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()激活,这两个方法是配合使用   

  • 相关阅读:
    Visual Studio IDE 背景色该为保护眼睛色
    搭建windows server 2008 r2 FTP 后 开启防火墙无法访问的解决办法
    Div+CSS展示物流跟踪轨迹信息
    如何删除打印队列中的任务
    用SoapUI进行Webservice的性能压力测试
    C# httpwebrequest post 传输百分号‘%’
    在线转换工具
    JSON数据转换到POCO的代码
    后端接口的幂等性(转)
    全局流水ID号生成的几种方法
  • 原文地址:https://www.cnblogs.com/baoguo/p/1311352.html
Copyright © 2011-2022 走看看