第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

關于Java多線程鎖的問題

關于Java多線程鎖的問題

hy_wang 2017-08-17 10:03:46
/** ?*?宇宙的能量系統(tǒng) ?*?遵循能量守恒定律: ?*?能量不會憑空創(chuàng)生或消失,只會從一處轉移到另一處 ?*/ public?class?EnergySystem?{ //能量盒子,能量存貯的地方 ?private?final?double[]?energyBoxes; ?private?final?Object?lockObj?=?new?Object(); ? ?/** ??*? ??*?@param?n????能量盒子的數(shù)量 ??*?@param?initialEnergy?每個能量盒子初始含有的能量值 ??*/ ?public?EnergySystem(int?n,?double?initialEnergy){ ?energyBoxes?=?new?double[n]; ?for?(int?i?=?0;?i?<?energyBoxes.length;?i++) ?energyBoxes[i]?=?initialEnergy; ?} ? ?/** ??*?能量的轉移,從一個盒子到另一個盒子 ??*?@param?from?能量源 ??*?@param?to?????能量終點? ??*?@param?amount?能量值 ??*/ ?public?void?transfer(int?from,?int?to,?double?amount){ ? ?synchronized(lockObj){ ? //while循環(huán),保證條件不滿足時任務都會被條件阻擋 ?//而不是繼續(xù)競爭CPU資源 ?while?(energyBoxes[from]?<?amount){ ?try?{ //條件不滿足,?將當前線程放入Wait?Set lockObj.wait(); }?catch?(InterruptedException?e)?{ e.printStackTrace(); } ?} ? ? ?System.out.print(Thread.currentThread().getName()); ?energyBoxes[from]?-=?amount; ?System.out.printf("從%d轉移%10.2f單位能量到%d",?from,?amount,?to); ?energyBoxes[to]?+=?amount; ?System.out.printf("?能量總和:%10.2f%n",?getTotalEnergies()); //喚醒所有在lockObj對象上等待的線程 ?lockObj.notifyAll(); ?} ? ?} ? ?/** ??*?獲取能量世界的能量總和? ??*/ ?public?double?getTotalEnergies(){ ?double?sum?=?0; ?for?(double?amount?:?energyBoxes) ?sum?+=?amount; ?return?sum; ?} ? ?/** ??*?返回能量盒子的長度 ??*/ ?public??int?getBoxAmount(){ ?return?energyBoxes.length; ?} ? }請問關于這段代碼 ?如果滿足energyBoxes[from] < amount的while循環(huán) ?則線程被堵塞我想問的是 如果之后使用lockObj.notifyAll();喚醒等待線程之后,再去競爭CPU資源。這樣的話她不是還滿足while循環(huán)最終面臨的還是被鎖,請問這個意義何在。或者應該如何理解
查看完整描述

1 回答

  • 1 回答
  • 1 關注
  • 1449 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網(wǎng)微信公眾號