為什么用 synchronized (lockobject) { if (energyboxs[from] < amount) return;加重系統(tǒng)開銷呢?
如果加入了synchronized塊,每個(gè)線程都會(huì)有所謂"加鎖",形成互斥,然后完整執(zhí)行完線程,而這段代碼使得那些所謂能量源不足的energyboxs[from]退出當(dāng)前方法,然后不就和其他線程一樣,獲得分時(shí)再次獲得cpu去執(zhí)行線程內(nèi)容,也就是和其他線程一樣獲得鎖執(zhí)行run方法,如何說這個(gè)(energyboxs[from] < amoun的線程會(huì)家中系統(tǒng)開銷呢?我認(rèn)為退出后再次執(zhí)行不就和其他要執(zhí)行的線程一樣無異,為何偏偏說(energyboxs[from] < amount的線程會(huì)加重開銷呢?
相關(guān)代碼:private final Object lockobject = new Object();
synchronized (lockobject) {
? ? if (energyboxs[from] < amount)
? ? return;
2018-01-26
其他線程處于就緒隊(duì)列,等待搶占資源,而wait是進(jìn)入等待隊(duì)列不能搶占資源,如果沒有wait,那么條件不足的線程不進(jìn)入等待隊(duì)列而是進(jìn)入就緒隊(duì)列,這樣的話該線程就有可能再一次進(jìn)行同步鎖進(jìn)入退出的操作,這就是所謂的加大開銷。
2017-11-16
當(dāng)線程條件不滿足時(shí)使用localObj.wait對(duì)線程進(jìn)行阻擋,其仍滯留在wait set中等待喚醒