JAVA學習筆記 執行緒

2021-08-07 23:18:23 字數 2367 閱讀 7217

執行緒基本控制方法

sleep方法

可以呼叫thread的靜態方法:

public static void sleep(long millis) throws interruptedexception

使當前執行緒休眠(暫時停止執行millis毫秒)

由於是靜態方法,sleep可以直接由類名呼叫:

thread.sleep(...)stop方法

盡量不適用stop方法,太粗暴。

使用類中設定變數,通過控制變數的方法控制線程結束。

interrupt方法

更改執行緒的狀態為中斷,如果重複呼叫,第一種可能清除中斷狀態,第二種可能丟擲異常。

join方法

合併某個執行緒。

舉例說明:

public

class

testjoin catch (interruptedexception e)

for (int i = 1; i <= 10; i++)

}}class

mythread2

extends

thread

@override

public

void run() catch (exception e) }}}

執行結果

i am t1

i am t1

i am t1

i am t1

i am t1

i am t1

i am t1

i am t1

i am t1

i am t1

i am main thread

i am main thread

i am main thread

i am main thread

i am main thread

i am main thread

i am main thread

i am main thread

i am main thread

i am main thread

分析:

t1.start()開始子執行緒,t1.join(),合併到主線程,但是先執行t1執行緒的內容,執行完畢後,順序執行主線程。

讓出cpu,給其他執行緒執行的機會。(相當於阻塞自己,重新排程,下一次誰執行未知)

關鍵字synchronized,互斥鎖。

synchronized(){}:執行該語句塊時,該語句塊鎖定。

synchronized方法名:表示整個方法為同步方法。雖然物件加鎖,但是可以訪問物件的其他方法。

public

class

testsync

implements

runnable

public

void

run()

}class timer catch (interruptedexception e)

system.out.println(name + ", 你是第" + num + "個使用timer的執行緒");}}}

class timer catch (interruptedexception e)

system.out.println(name + ", 你是第" + num + "個使用timer的執行緒");

}}

模擬死鎖問題
public

class

testdeadlock

implements

runnable catch (exception e)

synchronized (o2) }}

if (flag == 0) catch (

interruptedexception e)

synchronized (o1) }}

}} public

static

void

main(string args)

}

分析:

t1鎖定o1,睡眠0.5秒(執行t2),需要o2;

t2鎖定o2,睡眠0.5秒,需要o1;

造成死鎖現象。

wait時別的執行緒可以訪問鎖定物件

sleep時別的執行緒也不可以訪問鎖定物件

java學習筆記 執行緒

執行緒 多個有序嚴謹的指令集稱之為程式 程式的同時多執行稱之為程序 程式中不同執行路徑稱之為執行緒 多執行緒程式設計簡單 易於共享 效率高 執行緒開始 start 執行緒就緒狀態 執行緒執行 被其他執行緒搶占暫停執行 返回當前就緒 繼續執行 執行緒機率阻塞 訪問網路的時候 死亡狀態 執行緒的生命週期...

Java多執行緒學習筆記

程序與執行緒 1.程序 執行中的程式 乙個程序至少包含乙個執行緒 2.執行緒 程序中負責程式執行的執行單元 執行緒本身依靠程式進行執行 執行緒是程式中的順序控制流,只能使用分配給程式的資源和環境 3.單執行緒 程式中只存在乙個執行緒,實際上主方法就是乙個主線程 4.多執行緒 在乙個程式中執行多個任務...

java多執行緒學習筆記

1 執行緒是乙個程式內部不同的執行路徑 2 生成執行緒只要能使用介面就不要繼承,繼承後就不能繼承其他的類,比較死。而且繼承的run方法不能丟擲與父類不同的異常。比如sleep的intterruptedexception 3 start方法只是說我準備好了,進入就緒狀態了,等待排程後才進入執行狀態 4...