1 回答

TA貢獻(xiàn)88條經(jīng)驗(yàn) 獲得超19個(gè)贊
這么說吧,CPU單核心時(shí),設(shè)計(jì)一個(gè)全局變量作為狀態(tài)值,比如期望值為0,三個(gè)線程分別遍歷檢查list,每次遍歷都去讀這個(gè)狀態(tài)值,只要三個(gè)線程有那一個(gè)在遍歷過程中出錯(cuò),即改變此狀態(tài)值,此時(shí)其他兩個(gè)線程便能監(jiān)控到狀態(tài)變量的改變,此時(shí)跳出遍歷,結(jié)束線程即可。CPU多核心時(shí),三個(gè)線程有可能分給三個(gè)核心去執(zhí)行,此時(shí)涉及到競(jìng)寫,可以對(duì)狀態(tài)值加鎖,也可在主線程再維護(hù)一個(gè)volatile變量,然后在主線程中為三個(gè)線程各自維護(hù)一個(gè)狀態(tài)變量,check方法遍歷時(shí)去檢測(cè)volatile變量,當(dāng)主線程監(jiān)測(cè)到三個(gè)線程其中一個(gè)check出錯(cuò)改變自己的狀態(tài)變量值時(shí),主線程即改變此volatile變量,這時(shí)候呢由于這個(gè)變量的特性,其他兩個(gè)線程會(huì)立即得到volatile變量值的變化,由此跳出遍歷并結(jié)束線程。
添加回答
舉報(bào)