亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定

為什么用 synchronized (lockobject) { if (energyboxs[from] < amount) return;加重系統開銷呢?

如果加入了synchronized塊,每個線程都會有所謂"加鎖",形成互斥,然后完整執行完線程,而這段代碼使得那些所謂能量源不足的energyboxs[from]退出當前方法,然后不就和其他線程一樣,獲得分時再次獲得cpu去執行線程內容,也就是和其他線程一樣獲得鎖執行run方法,如何說這個(energyboxs[from] < amoun的線程會家中系統開銷呢?我認為退出后再次執行不就和其他要執行的線程一樣無異,為何偏偏說(energyboxs[from] < amount的線程會加重開銷呢?

相關代碼:private final Object lockobject = new Object();

synchronized (lockobject) {

? ? if (energyboxs[from] < amount)

? ? return;


正在回答

2 回答

其他線程處于就緒隊列,等待搶占資源,而wait是進入等待隊列不能搶占資源,如果沒有wait,那么條件不足的線程不進入等待隊列而是進入就緒隊列,這樣的話該線程就有可能再一次進行同步鎖進入退出的操作,這就是所謂的加大開銷。

0 回復 有任何疑惑可以回復我~
#1

Tenyears_3965313

不是return了嗎?該線程不是已經執行結束了嗎
2021-07-17 回復 有任何疑惑可以回復我~

當線程條件不滿足時使用localObj.wait對線程進行阻擋,其仍滯留在wait set中等待喚醒

0 回復 有任何疑惑可以回復我~

舉報

0/150
提交
取消

為什么用 synchronized (lockobject) { if (energyboxs[from] < amount) return;加重系統開銷呢?

我要回答 關注問題
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號