亚洲精品久久久中文字幕-亚洲精品久久片久久-亚洲精品久久青草-亚洲精品久久婷婷爱久久婷婷-亚洲精品久久午夜香蕉

您的位置:首頁技術(shù)文章
文章詳情頁

Java如何在臨界區(qū)中避免競態(tài)條件

瀏覽:7日期:2022-08-22 15:59:08

當(dāng)兩個線程競爭同一資源時,如果對資源的訪問順序敏感,就稱存在競態(tài)條件。導(dǎo)致競態(tài)條件發(fā)生的代碼區(qū)稱作臨界區(qū)。在臨界區(qū)中使用適當(dāng)?shù)耐骄涂梢员苊飧倯B(tài)條件。

界區(qū)實現(xiàn)方法有兩種,一種是用synchronized,一種是用Lock顯式鎖實現(xiàn)。synchronized 關(guān)鍵字,代表這個方法加鎖,相當(dāng)于不管哪一個線程(例如線程A),運行到這個方法時,都要檢查有沒有其它線程B(或者C、 D等)正在用這個方法(或者該類的其他同步方法),有的話要等正在使用synchronized方法的線程B(或者C 、D)運行完這個方法后再運行此線程A,沒有的話,鎖定調(diào)用者,然后直接運行。它包括兩種用法:synchronized 方法和 synchronized 塊。

Java語言的關(guān)鍵字,可用來給對象和方法或者代碼塊加鎖,當(dāng)它鎖定一個方法或者一個代碼塊的時候,同一時刻最多只有一個線程執(zhí)行這段代碼。當(dāng)兩個并發(fā)線程訪問同一個對象object中的這個加鎖同步代碼塊時,一個時間內(nèi)只能有一個線程得到執(zhí)行。另一個線程必須等待當(dāng)前線程執(zhí)行完這個代碼塊以后才能執(zhí)行該代碼塊。然而,當(dāng)一個線程訪問object的一個加鎖代碼塊時,另一個線程仍可以訪問該object中的非加鎖代碼塊。

有臨界區(qū)是為了讓更多的其它線程能安全夠訪問資源。

class Counter { protected long count = 0; public void add(long value) { this.count = this.count + value; } }

觀察線程A和B交錯執(zhí)行會發(fā)生什么,兩個線程分別加了2和3到count變量上,兩個線程執(zhí)行結(jié)束后count變量的值應(yīng)該等于5。然而由于兩個線程是交叉執(zhí)行的,兩個線程從內(nèi)存中讀出的初始值都是0。然后各自加了2和3,并分別寫回內(nèi)存。最終的值并不是期望的5,而是最后寫回內(nèi)存的那個線程的值,上面例子中最后寫回內(nèi)存的是線程A,但實際中也可能是線程B。如果沒有采用合適的同步機制,線程間的交叉執(zhí)行情況就無法預(yù)料。

add()方法就是一個臨界區(qū),它會產(chǎn)生競態(tài)條件。

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持好吧啦網(wǎng)。

標(biāo)簽: Java
相關(guān)文章:
主站蜘蛛池模板: 国产精品v欧美精品v日韩 | 98国产精品永久在线观看 | 成年人黄色大全 | 国产欧美日韩精品a在线观看 | 夭天色综合 | 国产精品久久久久久网站 | 亚洲免费美女视频 | 国内真实迷j下药在线观看 国内真实愉拍系列情侣 | cijilu刺激 国产免费的 | 中文字幕国产日韩 | 日本三级韩国三级三级a级按摩 | 亚洲六月婷婷 | 国产一区二区三区高清视频 | 欧美日韩国产成人精品 | 欧美精品午夜毛片免费看 | 国产精品亚洲午夜一区二区三区 | 在线观看 国产 | 久久99精品视频在线在线观看 | 又黄又免费的视频 | 久久久视频在线 | 最新69成人精品毛片 | 久久国产成人精品国产成人亚洲 | 九九九色视频在线观看免费 | 在线视频污| 国产精品主播在线观看 | 一本一道久久综合狠狠老 | 永久在线免费观看 | 91精品视频在线观看免费 | 久久久国产视频 | 色网址在线| 日韩人成免费网站大片 | 国产夫妇精品自在线 | 免费三级网址 | 国产精品观看 | 在线精品亚洲 | 美国一级大黄一片免费网站 | 国产一级爱片 | 亚洲国产美女在线观看 | 亚洲精品一区vv国产 | 欧美激情福利视频在线观看免费 | 亚洲国产成人久久77 |