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

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

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

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

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

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

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

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

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

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

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

相關(guān)文章

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

    Spring中的@PostConstruct注解使用詳解

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

    maven打包如何指定jdk的版本

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

    SpringBoot整合JPA方法及配置解析

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

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

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

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

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

    深入理解java重載和重寫

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

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

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

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

    EhCache?是一個(gè)純Java的進(jìn)程內(nèi)緩存框架,具有快速、精干等特點(diǎn)。它是Hibernate中的默認(rèn)緩存框架。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)用方式,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-07-07
  • 簡單了解Java創(chuàng)建線程兩種方法

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

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

最新評(píng)論

平和县| 大余县| 江孜县| 启东市| 新干县| 临清市| 聂拉木县| 桦川县| 吉水县| 德清县| 苍溪县| 辛集市| 松桃| 达拉特旗| 惠安县| 三明市| 皮山县| 渝北区| 高清| 巨野县| 墨玉县| 股票| 凌海市| 库车县| 永顺县| 伽师县| 仙游县| 重庆市| 苏州市| 海兴县| 石台县| 县级市| 阿城市| 清远市| 清涧县| 阜新| 贵南县| 德阳市| 雅江县| 远安县| 无极县|