您好,登录后才能下订单哦!
这篇文章主要为大家展示了“ 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有什么用”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注亿速云行业资讯频道!
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。