為什么用 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;
2018-01-26
其他線程處于就緒隊列,等待搶占資源,而wait是進入等待隊列不能搶占資源,如果沒有wait,那么條件不足的線程不進入等待隊列而是進入就緒隊列,這樣的話該線程就有可能再一次進行同步鎖進入退出的操作,這就是所謂的加大開銷。
2017-11-16
當線程條件不滿足時使用localObj.wait對線程進行阻擋,其仍滯留在wait set中等待喚醒