温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

wait、notify、notifyAll有什么用

发布时间:2021-11-03 10:55:42 来源:亿速云 阅读:205 作者:小新 栏目:编程语言

这篇文章主要为大家展示了“ 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有什么用”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注亿速云行业资讯频道!

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI