wait、notify、notifyAll有什么用

这篇文章主要为大家展示了“ wait、notify、notifyAll有什么用”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“ wait、notify、notifyAll有什么用”这篇文章吧。

让客户满意是我们工作的目标,不断超越客户的期望值来自于我们对这个行业的热爱。我们立志把好的技术通过有效、简单的方式提供给客户,将通过不懈努力成为客户在信息化领域值得信任、有价值的长期合作伙伴,公司提供的服务项目有:主机域名、虚拟空间、营销软件、网站建设、蓟州网站维护、网站推广。

一:wait、notify、notifyAll简单介绍


    1. 为什么 wait、notify、notifyAll 不是线程对象Thread的方法 

       原因:首先应该明确wait、notify、notifyAll三个方法都是对锁对象的操作,而锁可以是任何对象。在java的世界中任何对象都属于Object类,因此这三个方法都是Object的方法, 而不是线程对象Thread的方法。

     2. 使用方法需要注意两点:
           a.  这三个方法必须在synchronized关键字包含的临界区(简单理解,就是代码块)内使用;

           b. 使用方式为锁对象.方法(),比如obj.wait();


     3. 什么时候加锁、什么时候释放锁?必须明确以下几点:

           a. notify和notifyAll方法不会释放锁,这两个方法只是通知其他使用该锁当锁但是在wait状态的线程,可以准备抢锁了(注:这里还要格外注意一点,其他使用该锁当锁且处于wait状态的线程只有被notify或notifyAll唤醒了,才有资格抢锁)


          b. 某个锁对象调用wait方法会立即释放当前线程的该对象锁 , 且其他线程通过

notify/notifyAll方法通知该线程可以抢该对象锁时,如果当前线程抢到了,会从当前锁的wait方法之后开始执行 — 即从哪里wait,从哪里执行;

          c. 在synchronized、wait、notify、notifyAll的组合里加锁的方式只有一个即进入同步代码块时加锁;


释放锁的方式有两个: ①锁对象调用wait方法时会释放锁 ;② 走完同步代码块时自动释放锁


    4. notify、notifyAll的区别
       a. 某个锁对象的notify只会唤醒一个使用该锁当锁且处于wait状态的线程;
       b. 某个锁对象的notifyAll方法会把所有使用该锁当锁且处于wait状态的线程都唤醒;
   使用建议: 为了防止某些线程无法被通知到,建议都使用notifyAll。

以上是“ wait、notify、notifyAll有什么用”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注创新互联行业资讯频道!


网页名称:wait、notify、notifyAll有什么用
文章URL:http://azwzsj.com/article/gchdhd.html