最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

 更新時間:2020年10月19日 09:10:29   作者:cuisuqiang  
這篇文章主要介紹了Java如何在臨界區(qū)中避免競態(tài)條件,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下

當(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í)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • Spring中的@PostConstruct注解使用詳解

    Spring中的@PostConstruct注解使用詳解

    這篇文章主要介紹了Spring中的@PostConstruct注解使用詳解,該注解被用來修飾一個非靜態(tài)的void方法,被@PostConstruct修飾的方法會在服務(wù)器加載Servlet的時候運行,并且只會被服務(wù)器執(zhí)行一次,需要的朋友可以參考下
    2023-10-10
  • maven打包如何指定jdk的版本

    maven打包如何指定jdk的版本

    這篇文章主要介紹了maven打包如何指定jdk的版本問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-04-04
  • SpringBoot整合JPA方法及配置解析

    SpringBoot整合JPA方法及配置解析

    這篇文章主要介紹了SpringBoot整合JPA方法及配置過程,JPA是Java Persistence API的簡稱,中文名Java持久層API,感興趣想要詳細了解可以參考下文
    2023-05-05
  • 利用hadoop查詢兩兩之間有共同好友及他倆的共同好友都是誰

    利用hadoop查詢兩兩之間有共同好友及他倆的共同好友都是誰

    一想到要實現(xiàn)求共同好友的功能,很多人都會想到redis來實現(xiàn)。但是redis存儲和數(shù)據(jù)和計算時需要耗費較多的內(nèi)存資源。所以文本將介紹另一種方法,即利用Hadoop中的MapReduce來實現(xiàn),感興趣的可以了解一下
    2022-01-01
  • Servlet實現(xiàn)分頁效果

    Servlet實現(xiàn)分頁效果

    這篇文章主要為大家詳細介紹了Servlet實現(xiàn)分頁效果,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-03-03
  • 深入理解java重載和重寫

    深入理解java重載和重寫

    這篇文章主要介紹了Java方法重載和重寫原理區(qū)別解析,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2021-07-07
  • @Autowired自動裝配,@Bean注入@Primary,@Qualifier優(yōu)先級講解

    @Autowired自動裝配,@Bean注入@Primary,@Qualifier優(yōu)先級講解

    這篇文章主要介紹了@Autowired自動裝配,@Bean注入@Primary,@Qualifier優(yōu)先級,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-09-09
  • SpringBoot淺析緩存機制之Ehcache?2.x應(yīng)用

    SpringBoot淺析緩存機制之Ehcache?2.x應(yīng)用

    EhCache?是一個純Java的進程內(nèi)緩存框架,具有快速、精干等特點。它是Hibernate中的默認緩存框架。Ehcache已經(jīng)發(fā)布了3.1版本。但是本文的講解基于2.x版本
    2022-08-08
  • 踩坑之spring事務(wù),非事務(wù)方法與事務(wù)方法執(zhí)行相互調(diào)用方式

    踩坑之spring事務(wù),非事務(wù)方法與事務(wù)方法執(zhí)行相互調(diào)用方式

    這篇文章主要介紹了踩坑之spring事務(wù),非事務(wù)方法與事務(wù)方法執(zhí)行相互調(diào)用方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-07-07
  • 簡單了解Java創(chuàng)建線程兩種方法

    簡單了解Java創(chuàng)建線程兩種方法

    這篇文章主要介紹了簡單了解Java創(chuàng)建線程兩種方法,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-02-02

最新評論

枝江市| 厦门市| 广南县| 沾化县| 云和县| 玉环县| 金阳县| 丹棱县| 鄂托克旗| 清水县| 胶南市| 中山市| 平远县| 石城县| 阜新市| 克什克腾旗| 南通市| 大化| 涿州市| 大同县| 景谷| 随州市| 梁山县| 兴国县| 临洮县| 灵璧县| 澄城县| 奉新县| 正定县| 呈贡县| 长汀县| 克拉玛依市| 曲沃县| 宣恩县| 临桂县| 锡林浩特市| 渝北区| 梁河县| 常州市| 五大连池市| 长沙市|