国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

設(shè)計(jì)模式之并發(fā)特定場(chǎng)景下的設(shè)計(jì)模式 Two-phase Termination(兩階段終止)模式

這篇具有很好參考價(jià)值的文章主要介紹了設(shè)計(jì)模式之并發(fā)特定場(chǎng)景下的設(shè)計(jì)模式 Two-phase Termination(兩階段終止)模式。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

思考一下

  1. 在線程1中如何終止線程2?
  2. stop()?還是System.exit()?還是其他方式

方式解答

1.使用stop()不可取
線程對(duì)象的stop()方法會(huì)直接殺死線程,假設(shè)此時(shí)使用了線程鎖,當(dāng)此時(shí)使用了stop()命令會(huì)導(dǎo)致線程鎖無法釋放,以至于程序出現(xiàn)嚴(yán)重的問題,其中最常見的是死鎖。還可能導(dǎo)致資源泄露,因?yàn)槠渌€程無法獲取到被持有的資源。這可能會(huì)導(dǎo)致內(nèi)存泄露或者其他資源的持續(xù)占用,最終導(dǎo)致系統(tǒng)資源耗盡。

什么是死鎖?

死鎖是指兩個(gè)或多個(gè)線程相互持有對(duì)方所需的資源,導(dǎo)致它們都在等待對(duì)方釋放資源,從而永遠(yuǎn)無法繼續(xù)執(zhí)行下去。當(dāng)發(fā)生死鎖時(shí),程序可能會(huì)完全停止響應(yīng),或者表現(xiàn)出非常低的性能。在生產(chǎn)環(huán)境中,死鎖可能導(dǎo)致程序崩潰或系統(tǒng)不穩(wěn)定。

2.System.exit(int)不可取
System.exit(int)此方法是停止所有線程,此做法會(huì)使程序整個(gè)終止掉。

詳細(xì)解釋

  • 當(dāng)調(diào)用System.exit(int) 時(shí),JVM 將立即終止當(dāng)前程序的執(zhí)行,并返回一個(gè)整數(shù)狀態(tài)碼。通常情況下,返回值 0表示程序正常結(jié)束,非零值表示程序出現(xiàn)了某種異常或錯(cuò)誤。這意味著可以根據(jù)System.exit(int) 返回值來判斷程序的結(jié)束狀態(tài),并在必要時(shí)采取相應(yīng)的措施。
  • 需要注意的是,調(diào)用System.exit(int)將立即終止程序的執(zhí)行,因此任何在該方法調(diào)用之后的代碼都將不會(huì)被執(zhí)行。因此,需要小心使用該方法,避免在不必要的情況下過早地終止程序的執(zhí)行。
  • 通常情況下,不建議在常規(guī)的程序流程中經(jīng)常使用System.exit(int),除非在特定情況下需要強(qiáng)制結(jié)束程序的執(zhí)行。更好的做法是通過返回值或異常來控制程序的執(zhí)行流程。

正確停止: Two-phase Termination(兩階段終止)模式

  • 將終止過程分成兩個(gè)階段,其中第一個(gè)階段主要是線程 T1 向線程 T2發(fā)送終止指令,而第 二階段則是線程 T2響應(yīng)終止指令。
  • Java 線程進(jìn)入終止?fàn)顟B(tài)的前提是線程進(jìn)入 RUNNABLE 狀態(tài),而利用java線程中斷機(jī)制的interrupt()方法,可以讓線程從休眠狀態(tài)轉(zhuǎn)換到RUNNABLE 狀態(tài)。RUNNABLE 狀態(tài)轉(zhuǎn)換到終止?fàn)顟B(tài),讓 Java 線程自己執(zhí)行完 run()方法,所以一般我們采用的方法是設(shè)置一個(gè)標(biāo)志位,然后線程會(huì)在這個(gè)標(biāo)志位檢查,如果發(fā)現(xiàn)符合終止條件,則自動(dòng)退出run() 方法。

兩階段終止模式是一種應(yīng)用很廣泛的并發(fā)設(shè)計(jì)模式,在 Java 語言中使用兩階段終止模式來終止線程,需要注意兩個(gè)關(guān)鍵點(diǎn):文章來源地址http://www.zghlxwxcb.cn/news/detail-811304.html

  1. 僅檢查終止標(biāo)志位是不夠的,因?yàn)榫€程的狀態(tài)可能處于休眠態(tài);
  2. 僅檢查線程的中斷狀態(tài)也是不夠的,因?yàn)槲覀円蕾嚨牡谌筋悗?kù)很可能沒有正確處理中斷異常.
    例如:
    Google Guava庫(kù)中的com.google.common.io.Files類中的copy方法。在早期的版本中,這個(gè)方法可能沒有正確處理中斷異常。當(dāng)在文件拷貝過程中線程被中斷時(shí),該方法可能會(huì)忽略中斷并繼續(xù)執(zhí)行文件拷貝操作,而不會(huì)拋出InterruptedException。開發(fā)人員可能需要手動(dòng)捕獲中斷異常并進(jìn)行適當(dāng)?shù)奶幚怼?/li>

使用場(chǎng)景

  1. 安全地終止線程,比如釋放該釋放的資源;
  2. 要確保終止處理邏輯在線程結(jié)束之前一定會(huì)執(zhí)行時(shí),可使用該方法;

到了這里,關(guān)于設(shè)計(jì)模式之并發(fā)特定場(chǎng)景下的設(shè)計(jì)模式 Two-phase Termination(兩階段終止)模式的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 設(shè)計(jì)模式應(yīng)用場(chǎng)景

    工廠模式(Factory Pattern):使用工廠方法創(chuàng)建對(duì)象,而不是使用new直接實(shí)例化對(duì)象。 抽象工廠模式(Abstract Factory Pattern):提供一個(gè)創(chuàng)建一系列相關(guān)對(duì)象的接口,而無需指定它們的具體類。 單例模式(Singleton Pattern):限制一個(gè)類只能有一個(gè)實(shí)例并提供一個(gè)全局訪問點(diǎn)

    2024年02月09日
    瀏覽(21)
  • 【設(shè)計(jì)模式-03】Strategy策略模式及應(yīng)用場(chǎng)景

    【設(shè)計(jì)模式-03】Strategy策略模式及應(yīng)用場(chǎng)景

    Java 官方文檔 Overview (Java SE 18 JDK 18) module index https://docs.oracle.com/en/java/javase/18/docs/api/index.html Java中使用到的策略模式 Comparator、comparable Comparator (Java SE 18 JDK 18) declaration: module: java.base, package: java.util, interface: Comparator https://docs.oracle.com/en/java/javase/18/docs/api/java.base/java/util/Compar

    2024年01月22日
    瀏覽(24)
  • 【設(shè)計(jì)模式】什么場(chǎng)景可以考慮使用簡(jiǎn)單工廠模式

    【設(shè)計(jì)模式】什么場(chǎng)景可以考慮使用簡(jiǎn)單工廠模式

    工廠模式是一種創(chuàng)建型模式,主要作用就是創(chuàng)建對(duì)象,將對(duì)象的創(chuàng)建過程和使用的過程進(jìn)行解耦。我們平時(shí)說的工廠模式實(shí)際上是對(duì)三種不同類型的工廠模式的統(tǒng)稱, 簡(jiǎn)單工廠、工廠方法、抽象工廠 ,而在23種設(shè)計(jì)模式中,只定義了工廠方法和抽象工廠,將簡(jiǎn)單工廠看作是工

    2024年01月18日
    瀏覽(28)
  • 【設(shè)計(jì)模式-02】Strategy策略模式及應(yīng)用場(chǎng)景

    Java 官方文檔 Overview (Java SE 18 JDK 18) module index https://docs.oracle.com/en/java/javase/18/docs/api/index.html Java中使用到的策略模式 Comparator、comparable Comparator (Java SE 18 JDK 18) declaration: module: java.base, package: java.util, interface: Comparator https://docs.oracle.com/en/java/javase/18/docs/api/java.base/java/util/Compar

    2024年01月16日
    瀏覽(22)
  • 【java 多線程】并發(fā)設(shè)計(jì)模式-兩階段終止模式(對(duì)interrupt的理解)

    【java 多線程】并發(fā)設(shè)計(jì)模式-兩階段終止模式(對(duì)interrupt的理解)

    ?? 作者簡(jiǎn)介:大家好,我是阿牛,全棧領(lǐng)域優(yōu)質(zhì)創(chuàng)作者。?? ?? 個(gè)人主頁:館主阿牛?? ?? 支持我:點(diǎn)贊??+收藏??+留言?? ?? 系列專欄:并發(fā)編程?? ??格言:要成為光,因?yàn)橛信潞诘娜耍?? 今天總結(jié)一個(gè)設(shè)計(jì)模式中的屬于并發(fā)里的一個(gè)設(shè)計(jì)模式,叫兩階段終止模式

    2024年02月01日
    瀏覽(36)
  • 【企業(yè)場(chǎng)景】設(shè)計(jì)模式重點(diǎn)解析

    【企業(yè)場(chǎng)景】設(shè)計(jì)模式重點(diǎn)解析

    在平時(shí)的開發(fā)中,涉及到設(shè)計(jì)模式的有兩塊內(nèi)容: 我們平時(shí)使用的框架(比如spring、mybatis等) 我們自己開發(fā)業(yè)務(wù)使用的設(shè)計(jì)模式。 在平時(shí)的業(yè)務(wù)開發(fā)中,其實(shí)真正使用設(shè)計(jì)模式的場(chǎng)景并不多,雖然設(shè)計(jì)號(hào)稱有23種之多(不同的緯度可能會(huì)更多,不同程序員看法也不同) 但是

    2024年04月12日
    瀏覽(13)
  • 【實(shí)例項(xiàng)目:基于多設(shè)計(jì)模式下的日志系統(tǒng)(同步&異步)】

    【實(shí)例項(xiàng)目:基于多設(shè)計(jì)模式下的日志系統(tǒng)(同步&異步)】

    本項(xiàng)目涉及的到所有源碼見以下鏈接: https://gitee.com/ace-zhe/wz_log ? ? ? ?日志類似于日記,通常是指對(duì)完成某件事情的過程中狀態(tài)等的記錄,而計(jì)算機(jī)中的日志是指日志數(shù)據(jù),是有價(jià)值的信息寶庫(kù),各種操作系統(tǒng)、應(yīng)用程序、設(shè)備和安全產(chǎn)品的日志數(shù)據(jù)能夠幫助你提前發(fā)現(xiàn)和

    2024年02月09日
    瀏覽(23)
  • 【C++基于多設(shè)計(jì)模式下的同步&異步日志系統(tǒng)】

    【C++基于多設(shè)計(jì)模式下的同步&異步日志系統(tǒng)】

    本項(xiàng)?主要實(shí)現(xiàn)?個(gè)?志系統(tǒng), 其主要?持以下功能: 1???持多級(jí)別?志消息; 2???持同步?志和異步?志; 3???持可靠寫??志到控制臺(tái)、?件以及滾動(dòng)?件中; 4???持多線程程序并發(fā)寫?志; 5???持?jǐn)U展不同的?志落地?標(biāo). 1??CentOS 7.6(2核,內(nèi)存2GB,SSD云硬盤

    2024年02月08日
    瀏覽(20)
  • 【設(shè)計(jì)模式】23種設(shè)計(jì)模式——單例模式(原理講解+應(yīng)用場(chǎng)景介紹+案例介紹+Java代碼實(shí)現(xiàn))

    【設(shè)計(jì)模式】23種設(shè)計(jì)模式——單例模式(原理講解+應(yīng)用場(chǎng)景介紹+案例介紹+Java代碼實(shí)現(xiàn))

    介紹 所謂類的單例設(shè)計(jì)模式,就是采取一定的方法, 保證在整個(gè)的軟件系統(tǒng)中,對(duì)某個(gè)類只能存在一個(gè)對(duì)象實(shí)例 ,并且該類只提供一個(gè)取得其對(duì)象實(shí)例的方法(靜態(tài)方法)。 比如Hibernate的SessionFactory,它充當(dāng)數(shù)據(jù)存儲(chǔ)源的代理,并負(fù)責(zé)創(chuàng)建Session對(duì)象。SessionFactory并不是輕量

    2024年02月13日
    瀏覽(32)
  • 【設(shè)計(jì)模式】builder 創(chuàng)建者設(shè)計(jì)模式詳解(包含電商應(yīng)用場(chǎng)景及代碼示例)

    在常見的設(shè)計(jì)模式中,“Builder” 通常是指一種設(shè)計(jì)模式,而不是具體的類或方法。Builder 模式是一種創(chuàng)建型設(shè)計(jì)模式,其目的是通過提供一個(gè)獨(dú)立的構(gòu)建器類來構(gòu)建一個(gè)復(fù)雜對(duì)象。 建造者模式 (Builder Pattern) 是一種創(chuàng)建型設(shè)計(jì)模式,它的主要目標(biāo)是為了將一個(gè)復(fù)雜對(duì)象的構(gòu)

    2024年01月21日
    瀏覽(22)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包