一针见血系列[12]: 自旋锁没有那么高大上,就是一个死循环

栏目:一针见血 作者:admin 日期:2018-10-29 评论:0 点击: 778 次

我们有时会遇到这样的场景:线程A执行到某个点的时候,因为某个条件condition不满足,需要线程A暂停;等到线程B修改了条件condition,使condition满足了线程A的要求时,A再继续执行。最简单的实现方法就是将condition设为一个volatile的变量,当A线程检测到条件不满足时就自旋,类似下面:
这种方式的问题在于自旋非常耗费CPU资源,当然如果在自旋的代码块里加入Thread.sleep(time)将会减轻CPU资源的消耗,但是如果time设的太大,A线程就不能及时响应condition的变化,如果设的太小,依然会造成CPU的消耗。

一针见血系列[12]: 自旋锁没有那么高大上,就是一个死循环:等您坐沙发呢!

发表评论