成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

Java多線程基礎(十二)——Two-phase Termination模式

cheng10 / 1389人閱讀

摘要:一定義我們將線程的正常處理狀態(tài)稱為作業(yè)中,當希望結束這個線程時,則送出終止請求。計數(shù)線程類執(zhí)行三模式講解模式的角色如下參與者參與者用于調(diào)用終止請求。參與者擁有一個標識門閂表示是否已經(jīng)收到終止請求

一、定義

我們將線程的正常處理狀態(tài)稱為“作業(yè)中”,當希望結束這個線程時,則送出“終止請求”。接著,這個線程并不會立刻結束,而是進入“終止處理中”狀態(tài),此時線程還是運行著的,可能處理一些釋放資源等操作。直到終止處理完畢,才會真正結束。

Two-phase Termination主要考慮以下問題:

安全地結束(安全性);

一定會進行終止處理(生命性);

收到“終止請求”后,要盡快進行終止處理(響應性);

二、模式案例

該案例中,線程每隔500ms將計數(shù)器增加1,在大約10s后結束。

計數(shù)線程類:

public class CountupThread extends Thread {
    private long counter = 0;
    private volatile boolean shutdownRequested = false;
    public void shutdownRequest() {
        shutdownRequested = true;
        interrupt();
    }
    public boolean isShutdownRequested() {
        return shutdownRequested;
    }
    public final void run() {
        try {
            while (!shutdownRequested) {
                doWork();
            }
        } catch (InterruptedException e) {
        } finally {
            doShutdown();
        }
    }
    private void doWork() throws InterruptedException {
        counter++;
        System.out.println("doWork: counter = " + counter);
        Thread.sleep(500);
    }
    private void doShutdown() {
        System.out.println("doShutdown: counter = " + counter);
    }
}

執(zhí)行:

public class Main {
    public static void main(String[] args) {
        System.out.println("main: BEGIN");
        try {
            CountupThread t = new CountupThread();
            t.start();
            Thread.sleep(10000);
            System.out.println("main: shutdownRequest");
            t.shutdownRequest();
            System.out.println("main: join");
            t.join();
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        System.out.println("main: END");
    }
}
三、模式講解

Two-phase Termination模式的角色如下:

TerminationRequester參與者

TerminationRequester參與者用于調(diào)用終止請求。(案例中的Main類)

Terminator參與者

Terminator參與者接受終止請求,進行實際的終止處理,提供shutdownRequest終止方法供外界調(diào)用。
Terminator參與者擁有一個標識(門閂)表示是否已經(jīng)收到終止請求

文章版權歸作者所有,未經(jīng)允許請勿轉載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉載請注明本文地址:http://systransis.cn/yun/71508.html

相關文章

  • 一起學并發(fā)編程 - 優(yōu)雅關閉

    摘要:文本將介紹兩種可以優(yōu)雅的終止線程的方式第一種在多線程模式中有一種叫兩步終止的模式可以優(yōu)雅的終止線程,這種模式采用了兩個步驟來終止線程,所以叫兩步終止模式。 Java中原來在Thread中提供了stop()方法來終止線程,但這個方法是不安全的,所以一般不建議使用。文本將介紹兩種可以優(yōu)雅的終止線程的方式... 第一種 在JAVA《Java多線程模式》中有一種叫Two-Phase Term...

    曹金海 評論0 收藏0
  • Java學習路線總結,搬磚工逆襲Java架構師(全網(wǎng)最強)

    摘要:哪吒社區(qū)技能樹打卡打卡貼函數(shù)式接口簡介領域優(yōu)質(zhì)創(chuàng)作者哪吒公眾號作者架構師奮斗者掃描主頁左側二維碼,加入群聊,一起學習一起進步歡迎點贊收藏留言前情提要無意間聽到領導們的談話,現(xiàn)在公司的現(xiàn)狀是碼農(nóng)太多,但能獨立帶隊的人太少,簡而言之,不缺干 ? 哪吒社區(qū)Java技能樹打卡?【打卡貼 day2...

    Scorpion 評論0 收藏0
  • 譯文-G1收集器

    摘要:原文出處設計的一個重要目標是設置階段的持續(xù)時長和頻率,因為垃圾收集器可預測,可配置。收集器盡自己最大努力高概率實現(xiàn)目標但不是必然,它會是硬實時。因此名稱是收集器。運行不同使用獨立的收集器。 原文出處:G1 – Garbage First G1設計的一個重要目標是設置stop-the-world階段的持續(xù)時長和頻率,因為垃圾收集器可預測,可配置。事實上,G1是一款軟實時的收集器,意味著你...

    missonce 評論0 收藏0
  • ThreadPoolExecutor線程池如何彈性伸縮

    摘要:基礎系列的與方法類初始化順序線程池如何彈性伸縮的幾個要點的緩存什么場景下使用阻塞隊列的使用及模式中的序本文主要分析線程池是如何進行線程的彈性伸縮。線程池最小是,最大是,除非設置了和超時時間,這種情況線程數(shù)可能減少到,最大可能是。 Java基礎系列 Java的hashcode與equals方法 Java類初始化順序 ThreadPoolExecutor線程池如何彈性伸縮 HashMap...

    hersion 評論0 收藏0
  • Java線程進階(十二)—— J.U.C之a(chǎn)tomic框架:Unsafe類

    摘要:本身不直接支持指針的操作,所以這也是該類命名為的原因之一。中的許多方法,內(nèi)部其實都是類在操作。 showImg(https://segmentfault.com/img/remote/1460000016012251); 本文首發(fā)于一世流云的專欄:https://segmentfault.com/blog... 一、Unsafe簡介 在正式的開講 juc-atomic框架系列之前,有...

    趙連江 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<