摘要:一定義我們將線程的正常處理狀態(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
摘要:文本將介紹兩種可以優(yōu)雅的終止線程的方式第一種在多線程模式中有一種叫兩步終止的模式可以優(yōu)雅的終止線程,這種模式采用了兩個步驟來終止線程,所以叫兩步終止模式。 Java中原來在Thread中提供了stop()方法來終止線程,但這個方法是不安全的,所以一般不建議使用。文本將介紹兩種可以優(yōu)雅的終止線程的方式... 第一種 在JAVA《Java多線程模式》中有一種叫Two-Phase Term...
摘要:哪吒社區(qū)技能樹打卡打卡貼函數(shù)式接口簡介領域優(yōu)質(zhì)創(chuàng)作者哪吒公眾號作者架構師奮斗者掃描主頁左側二維碼,加入群聊,一起學習一起進步歡迎點贊收藏留言前情提要無意間聽到領導們的談話,現(xiàn)在公司的現(xiàn)狀是碼農(nóng)太多,但能獨立帶隊的人太少,簡而言之,不缺干 ? 哪吒社區(qū)Java技能樹打卡?【打卡貼 day2...
摘要:基礎系列的與方法類初始化順序線程池如何彈性伸縮的幾個要點的緩存什么場景下使用阻塞隊列的使用及模式中的序本文主要分析線程池是如何進行線程的彈性伸縮。線程池最小是,最大是,除非設置了和超時時間,這種情況線程數(shù)可能減少到,最大可能是。 Java基礎系列 Java的hashcode與equals方法 Java類初始化順序 ThreadPoolExecutor線程池如何彈性伸縮 HashMap...
摘要:本身不直接支持指針的操作,所以這也是該類命名為的原因之一。中的許多方法,內(nèi)部其實都是類在操作。 showImg(https://segmentfault.com/img/remote/1460000016012251); 本文首發(fā)于一世流云的專欄:https://segmentfault.com/blog... 一、Unsafe簡介 在正式的開講 juc-atomic框架系列之前,有...
閱讀 3073·2023-04-26 00:49
閱讀 3733·2021-09-29 09:45
閱讀 1007·2019-08-29 18:47
閱讀 2753·2019-08-29 18:37
閱讀 2738·2019-08-29 16:37
閱讀 3301·2019-08-29 13:24
閱讀 1784·2019-08-27 10:56
閱讀 2355·2019-08-26 11:42