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

  • 相关阅读:
    Nodejs exec和spawn的区别
    VC++每个版本对应的库
    在cmd启动一个win32程序,printf把信息输出到启运它的那个CMD窗口
    window 控制台解决中文乱码
    NW.js 桌面应用程序
    C++ Addon Async 异步机制
    Node bak
    nodejs electron 创建桌面应用
    跨平台桌面程序框架Electron
    js post 下载文件
  • 原文地址:https://www.cnblogs.com/baoguo/p/1311352.html
Copyright © 2020-2023  润新知