Java : while 循环和锁阻塞,哪个更耗资源?

2017-04-02 15:52:32 +08:00
 esolve

while 的情况 譬如 while(p=null){}

然后在另一个地方 p 赋值为非 null

用锁阻塞

synchronized(obj){ obj.wait(); }

然后在另一个地方 obj.notify();

3663 次点击
所在节点    问与答
10 条回复
siriussilen
2017-04-02 17:38:36 +08:00
当然是忙等待啦~~~
izhaohui
2017-04-02 18:02:18 +08:00
锁是会让出 cpu 资源的
hjc4869
2017-04-02 18:04:27 +08:00
楼主可以了解一下自旋锁以及其应用场景
kaneg
2017-04-02 18:10:55 +08:00
简单的说, while 循环的线程是一直处于运行状态,而 wait 则是阻塞状态,即让出 CPU 时间片。
esolve
2017-04-02 18:52:25 +08:00
@kaneg 那锁是如何被唤醒的?异步信号机制?
kenken
2017-04-02 18:54:19 +08:00
你这个就是自旋锁和排他锁的区别。 自旋锁一般用在非常短的锁等待上,配合 cas 效率更高,上下文切换更少。排他锁用途广泛,需要上下文切换,效率肯定比自旋锁要低。 自旋锁占资源多
wwqgtxx
2017-04-02 23:43:51 +08:00
@esolve 请参见 LockSupport 这个 Class 的操作, jdk1.6+之后内置了
SoloCompany
2017-04-03 00:25:17 +08:00
我不小心点了一下楼主的问题列表。。。
wwqgtxx
2017-04-03 07:33:17 +08:00
@SoloCompany 然后发现我们俩貌似回复了他提的每个问题😂
sagaxu
2017-04-03 14:03:43 +08:00
@SoloCompany 我也看了下,楼主肯定不是计算机专业的😁

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/352157

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX