如何正確而優雅的終止執行中的執行緒

2021-08-22 11:56:26 字數 1054 閱讀 2817

一、使用volatile [ˈvɑ:lətl] (不穩定的)標誌位

首先,實現乙個runnable介面,在其中定義volatile標誌位,在run()方法中使用標誌位控制程式執行。

public class myrunnable implements runnable catch (interruptedexception e)

//退出標誌生效位置

while (flag)

system.out.println("第" + thread.currentthread().getname() + "個執行緒終止");}}

然後,在main()方法中建立執行緒,在合適的時候,修改標誌位,終止執行中的執行緒。

public class treadtest

//執行緒休眠

thread.sleep(2000l);

system.out.println("——————————————————————————");

//修改退出標誌,使執行緒終止

runnable.flag = false;

}3、使用interrupt()中斷的方式,注意使用interrupt()方法中斷正在執行中的執行緒只會修改中斷狀態位,可以通過isinterrupted()判斷。如果使用interrupt()方法中斷阻塞中的執行緒,那麼就會丟擲interruptedexception異常,可以通過catch捕獲異常,然後進行處理後終止執行緒。有些情況,我們不能判斷執行緒的狀態,所以使用interrupt()方法時一定要慎重考慮。

看乙個簡單的例子(中斷執行中的執行緒):

public class myrunnable2 implements runnable catch (interruptedexception e)

//執行時的執行緒被中斷後,只會修改中斷標記,不會丟擲異常

while(thread.currentthread().isinterrupted())

system.out.println(thread.currentthread().getname() + " 執行緒被中斷");}}

public class treadtest

如何優雅地恢復執行中的容器應用

作者簡介 鞠巨集超,rancher研發工程師。4年雲計算領域經驗,2018年加入rancher labs,先後參與了longhorn產品研發,rancher2.x產品研發,目前主要致力於rancher企業版產品的設計與研發工作。longhorn是基於kubernetes的輕量級分布式塊儲存系統,它完...

oracle 如何終止儲存過程的執行

0.查詢正在執行的儲存過程 select from v db object cache where locks 0 and pins 0 and type procedure 1.在v access檢視中找到要停止程序的sid 舉例 儲存過程名 crh entry select t.from v a...

英語中如何優雅的罵人

英語中如何優雅的罵人 人在北美 講英語難,吵架更難.雖說人在國外總是想盡辦法以和為貴,但要跟人家吵架怎麼辦?很多人一生氣,所有的英文都忘光了,平常英文就說不出口,更何況是吵架,所以滿腦子浮現的不是 f 就是 s 這樣是很不好的.我還聽過有乙個人很絕,英文罵不過人。家就用中文罵,反正對方聽得懂聽不懂都...