多執行緒系列 優雅關閉執行緒

2021-10-01 20:49:20 字數 1777 閱讀 8526

多執行緒有三種關閉方式:1、通過while(flag){}的flag來判斷(感覺像是廢話)。2、通過stop來關閉。3、執行緒中所有邏輯執行完,自然結束(感覺也像是廢話)。通過while迴圈的開關來關閉以及執行緒自然結束大家都知道,我們這裡說一下stop。

大家都知道現在的jdk版本中stop方法已經不建議使用了還有什麼必要說呢,同時大家也可能會問interrupt難道不能關閉執行緒嘛,我們下面來乙個例子:

public

class

threadtest

private

static

void

test2()

throws interruptedexception

catch

(interruptedexception e)

b++;}

}); mythread.

start()

; thread.

sleep

(1000);

mythread.

interrupt()

;// mythread.stop();

system.out.

println

("執行緒是否停止:"

+mythread.

isinterrupted()

);thread.

sleep

(5000);

system.out.

println

("a="

+a);

system.out.

println

("執行緒是否停止:"

+mythread.

isinterrupted()

);system.out.

println

("b="

+b);

system.out.

println

("執行緒是否停止:"

+mythread.

isinterrupted()

);}}

如果使用interrupt,最終的列印是a=1,b=1,而使用stop則是a=1,b=0,可以看出stop將synchronized包圍的原子塊給破壞了,也就是原本的**不管三七二十一,一旦執行stop就會停止,看上去很雷厲風行,其實是很不優雅的,你想原本一段加鎖**,而你stop,活生生的將一原子操作在中間給停止了,這是有危險性的,容易帶來執行緒不安全。我們再來看interrupt,可以很清晰的看到,interrupt並沒有關閉執行緒,也沒有破壞原子操作,而是讓執行緒順利執行結束了,所以interrupt是不具備關閉執行緒的能力的。

那麼interrupt不能關閉執行緒,stop能關閉但不優雅,那執行緒怎麼關閉:(1)while(flag),(2)讓執行緒邏輯走到最後。如果你不想讓程式走完所有呢,提前return,就到最後了呀。你可能會問那要interrupt有何用,interrupt用處大著了,他雖然不可以關閉執行緒,但可以打斷阻塞,讓執行緒繼續執行,當執行緒處在wait,sleep,或者被其他東西阻塞時,interrupt是可以跳出阻塞,讓執行緒狀態重新變回runnable的。

那interrupt怎麼實現關閉執行緒呢?方法:

thread thread =

newthread((

)->})

;

thread.

start()

;//主線程中呼叫interrupt

thread.

interrupt()

;

多執行緒系列(二) 多執行緒基礎

目錄 一 執行緒的幾種狀態 屬性 方法 執行緒的5個狀態 1 建立狀態 new 對應 thread th new thread worker 時 就建立了乙個新的執行緒,僅僅是新建狀態,程式還沒有執行執行緒中的 2 就緒狀態 runnable 對應 th.start 方法,新建執行緒在接收到star...

python多執行緒的優雅使用

筆者作為一名python職業玩家,仔細研究了下python多執行緒的使用方法,記錄下學習的過程 python中的threading模組是專門用來處理多執行緒併發的情況,廢話少說,直接上 import threading class mythread threading.thread def init...

C 多執行緒系列

個人感覺c 的程式設計,除了對演算法和類庫的使用以外,達到一定的水平以後,多執行緒的使用將會成為乙個很大的瓶頸。所以重新花費時間讀了一本書 net 4.0物件導向程式設計漫談 應用篇 裡面關於多執行緒的描述。自己做了乙個讀書筆記,把多執行緒部分的要點進行了梳理,並且適當的加上了一些自己的測試和理解。...