java高并发编程讲解_有人看过 java高并发编程详解 汪文君著 这本书吗?
營(yíng)業(yè)大廳叫號(hào)機(jī)程序,共享資源的問(wèn)題
>static是類的屬性,存儲(chǔ)在類的那塊內(nèi)存,每個(gè)線程操作的時(shí)候會(huì)讀取這個(gè)內(nèi)存塊,甚至?xí)虞d到寄存器或高速緩存中,這樣自然不會(huì)保證其他線程對(duì)該值的可見(jiàn)性
1. 某個(gè)號(hào)碼被略過(guò),沒(méi)有出現(xiàn)
并行的情況下(Thread1和Thread2運(yùn)行在不同cpu上),static不能保證index的可見(jiàn)性,切換回Thread2之后,其值仍是66,那么66就打印出來(lái)了
并發(fā)的情況下(同一個(gè)cpu上運(yùn)行Thread1和Thread2),切換回Thread2后,其值就會(huì)變?yōu)?8了
2. 某個(gè)號(hào)碼多次顯示
這種情況應(yīng)該只是在并行的情況下出現(xiàn)
線程1執(zhí)行index+1 ,然后CPU 執(zhí)行權(quán)落入線程2 手里,由于線程1并沒(méi)有給index 賦予計(jì)算后的結(jié)果393 ,因此線程2 執(zhí)行index+1的結(jié)果仍然是393 ,而切換回Thread1,所以會(huì)出現(xiàn)重復(fù)號(hào)碼的情況。
3. 號(hào)碼超過(guò)了最大值500
這種情況下應(yīng)該只是在并發(fā)的情況下發(fā)生
當(dāng)index=499 的時(shí)候,線程1和線程2 都看到條件滿足,線程2 短暫停頓,線程1將index 增加到了500 ,線程2 恢復(fù)運(yùn)行后又將500增加到了501 ,此時(shí)就出現(xiàn)了超過(guò)最大值的情況。
如果錯(cuò)誤,請(qǐng)指正
總結(jié)
以上是生活随笔為你收集整理的java高并发编程讲解_有人看过 java高并发编程详解 汪文君著 这本书吗?的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: CS229 1 .线性回归与特征归一化(
- 下一篇: 联想蓝屏分析工具