为什么JAVA要提供 wait/notify 机制?是为了避免轮询带来的性能损失
2011-02-19 16:08
423 查看
Quotes: http://chenjianjx.javaeye.com/blog/230465
为什么JAVA要提供 wait/notify 机制?是为了避免轮询带来的性能损失
我好土,真的。学用了四五年的JAVA,还从没用过 wait/notify,也不清楚它跟synchronized 关键字 相比有什么好处。今天查了些资料,终于明白了:wait/notify 机制是为了避免轮询带来的性能损失。
为了说清道理,我们用“图书馆借书”这个经典例子来作解释。
一本书同时只能借给一个人。现在有一本书,图书馆已经把这本书借了张三。
在简单的synchrnozed 同步机制下,李四如果想借,先要去图书馆查看书有没有还回来。李四是个心急的人,他每天都去图书馆查;而张三看书看得慢,过了半个月才把书还回来,结果李四在这半个月里全都白跑了,浪费了不少交通车费
而如果使用wait/notify机制,李四就不用白忙了。他第一次去图书馆时发现书已借走,就回家静静等待(wait);张三把书还掉后,通知(notify)李四,李四去图书馆拿书即可。整个过程中,李四没有白跑,没浪费钱。
回到计算机世界:
书 -- 临界资源,需互斥地访问
张三,李四 -- 两个竞争的线程
坐车去图书馆查书 -- 轮询
车费 -- CPU空间
等待 -- wait
通知下一个借书者 -- notify
也就是说,若使用简单的synchonized机制实现互斥,会导致线程主动发起轮询,若N次轮询没有成功,就产生了N次的CPU空间浪费;如果加上了 wait/notify机制,就可以避免这些无谓的轮询,节省CPU的消耗。
为什么JAVA要提供 wait/notify 机制?是为了避免轮询带来的性能损失
我好土,真的。学用了四五年的JAVA,还从没用过 wait/notify,也不清楚它跟synchronized 关键字 相比有什么好处。今天查了些资料,终于明白了:wait/notify 机制是为了避免轮询带来的性能损失。为了说清道理,我们用“图书馆借书”这个经典例子来作解释。
一本书同时只能借给一个人。现在有一本书,图书馆已经把这本书借了张三。
在简单的synchrnozed 同步机制下,李四如果想借,先要去图书馆查看书有没有还回来。李四是个心急的人,他每天都去图书馆查;而张三看书看得慢,过了半个月才把书还回来,结果李四在这半个月里全都白跑了,浪费了不少交通车费
而如果使用wait/notify机制,李四就不用白忙了。他第一次去图书馆时发现书已借走,就回家静静等待(wait);张三把书还掉后,通知(notify)李四,李四去图书馆拿书即可。整个过程中,李四没有白跑,没浪费钱。
回到计算机世界:
书 -- 临界资源,需互斥地访问
张三,李四 -- 两个竞争的线程
坐车去图书馆查书 -- 轮询
车费 -- CPU空间
等待 -- wait
通知下一个借书者 -- notify
也就是说,若使用简单的synchonized机制实现互斥,会导致线程主动发起轮询,若N次轮询没有成功,就产生了N次的CPU空间浪费;如果加上了 wait/notify机制,就可以避免这些无谓的轮询,节省CPU的消耗。
相关文章推荐
- 为什么JAVA要提供 wait/notify 机制?是为了避免轮询带来的性能损失
- 为什么JAVA要提供 wait/notify 机制?是为了避免轮询带来的性能损失
- 为什么JAVA要提供 wait/notify 机制?是为了避免轮询带来的性能损失
- 为什么JAVA要提供 wait/notify 机制?是为了避免轮询带来的性能损失
- 为什么JAVA要提供 wait/notify 机制?是为了避免轮询带来的性能损失
- 为什么JAVA要提供 wait/notify 机制?是为了避免轮询带来的性能损失
- 为什么JAVA要提供 wait/notify 机制?是为了避免轮询带来的性能损失
- 为什么JAVA要提供 wait/notify 机制?是为了避免轮询带来的性能损失
- 为什么JAVA要提供 wait/notify 机制?是为了避免轮询带来的性能损失
- Java 为什么使用wait()/notify()机制?
- 这个java程序,为什么一个notify唤醒了3个wait
- java多线程设计wait、notify、notifyall、synchronized的使用机制
- 为什么JAVA的垃圾回收机制无法避免内存泄漏
- java多线程设计wait、notify、notifyall、synchronized的使用机制
- QWaitCondition(和Java的Notify机制非常相像)
- Java中的等待/通知机制(wait/notify)
- java中wait/notify机制
- java 为什么wait(),notify(),notifyAll()必须在同步方法/代码块中调用?
- java多线程设计wait/notify机制 (synchronized与对象锁)
- java使用轮询和wait()/notify()实现多线程之间的通信