线程的虚假唤醒
//真正喚醒
while (!cond) {lock.wait();
}
//虛假喚醒
if(!code)
{
lock.wait();
}
在不同的語言,甚至不同的操作系統上,條件鎖都會產生虛假喚醒現象。所有語言的條件鎖庫都推薦用戶把wait()放進循環里:
我們知道wait()狀態的時候,線程會釋放資源,等到被喚醒的時候,從上次wait()的地方醒來,繼續執行,如果使用條件判斷,判斷完code==true,然后wait(),其他線程將code修改成flase,然后再喚醒本線程,此時,本線程不會再繼續判斷,而是繼續執行,而如果使用while循環判斷,就能檢驗出code已經被修改成flase
總結
- 上一篇: volatile关键字及JMM模型
- 下一篇: 夸克、QQ浏览器、简单搜索竞品分析报告