为什么wait()和notify()必须要使用sychronized
来源:互联网 发布:残疾人就业知乎 编辑:程序博客网 时间:2024/03/28 18:47
为什么wait()和notify()必须要使用sychronized
如果不用就会报错IllegalMonitorStateException.
首先要明确,wait()和notify()的实现基础是基于对象存在的。那为什么要基于对象存在呢?
这里要明确要等,等待的就是一个对象发出的信号,所以要基于对象而存在。
既然是基于对象的,因此它不得不用一个数据结构来存放这些等待的线程,而且这个数据结构应当是与该对象绑定的,此时在这个对象上可能同时有多个线程调用wait()/notify()方法。
在向这个对象所对应的双向链表中写入、删除数据时,依然存在并发的问题,理论上也需要一个锁来控制。在JVM内核源码中并没有发现任何自己用锁来控制写入的动作,只是通过检查当前线程是否为对象的OWNER来判定是否要抛出相应的异常。由此可见它希望该动作由Java程序这个抽象层次来控制,它为什么不想去自己控制锁呢?
因为有时候更低层抽象层次的锁未必是好事,因为这样的请求对于外部可能是反复循环地去征用,或者这些代码还可能在其他地方复用,也许将它粗粒度化会更好一些,而且这样的代码写在Java程序中本身也会更加清晰,更加容易看到相互之间的关系。
0 0
- 为什么wait()和notify()必须要使用sychronized
- 为什么wait与notify之前必须要加synchronized?
- wait和notify使用
- 为什么必须要使用CloseHandle关闭句柄
- 为什么必须要使用CloseHandle关闭句柄
- 为什么必须要使用CloseHandle关闭句柄
- wait和notify的使用
- wait和notify的使用
- wait 和notify的使用
- wait, notify 和 notifyAll 使用
- Java 为什么使用wait()/notify()机制?
- 生产者-消费者模式 系列 之一 Sychronized,Notify,Wait 篇
- 清晰解题: 为什么wait()和notify()或notifyaAll()需要搭配synchonized关键字使用
- wait()和notify()的使用(来源于网络)
- Object的Wait() 和notify()方法使用
- 使用wait和notify实现间隔打印
- wait和notify的理解与使用
- java wait和notify的使用
- OJ1002 C语言版
- Hive之架构 & 功能
- angularjs服务
- 第九周—等比数列
- QoS中ToS和CoS的区别?802.1p、ip pri、dscp的区别?
- 为什么wait()和notify()必须要使用sychronized
- js数据回显处理
- 利用dump文件反向定位崩溃位置的体会
- javaweb项目搭建ehcache缓存系统
- 微信扫码支付流程
- React Native开发环境搭建 -- Windows 版
- 多媒体相关的开源代码和软件
- TCP
- awk使用