JavaSE 20190511 多執行緒

2021-09-22 08:22:00 字數 2313 閱讀 5998

一.多執行緒

1.多執行緒:多工同時執行就是多執行緒,如果沒有任務,就不需要使用多執行緒

2.執行緒和程序之間的區別:

執行緒:cpu排程的最小單位

程序:資源分配的最小單位

乙個程序可以包含1~n個執行緒

3.執行緒開啟的方式:

1)繼承thread類,重寫run()方法;

建立子類物件,呼叫start()方法,開啟多執行緒

2)實現runnable介面,重寫run()方法;

3)實現callable介面,重寫call()方法 (了解)

public class threaddemo01 extends thread

} public static void main(string args)

th.start();

}}

4.實現runnable介面,重寫run()方法

開啟執行緒:thread類做**,呼叫thread類中的start方法開啟執行緒

優點:避免了單繼承的侷限性

實現資源共享

public class threaddemo02 implements runnable

} public static void main(string args)

}}

5.開啟執行緒的第三種方式:

實現callable介面,重寫call()方法;

優點:可以有返回值,可以丟擲異常

缺點:使用複雜

6.檢視執行緒的狀態:

thread.state getstate()  返回該執行緒的狀態。

7.執行緒優先順序:

void setpriority(int newpriority) 更改執行緒的優先順序。 

int getpriority() 返回執行緒的優先順序 

1~10表示  1是最小   10是最大  預設是5

min_priority 最小

norm_priority 預設

max_priority 最大

8.執行緒的狀態:

新生狀態:new執行緒物件的時候,這個執行緒處於新生狀態

就緒狀態:呼叫start()方法,執行緒進入就緒狀態,進入到就緒佇列,進入就緒狀態代表執行緒有能力執行,但是要等到cpu呼叫,分                                配時間片才能執行

執行狀態:當前cpu排程,分配時間片給就緒狀態的執行緒,當前執行緒執行

阻塞狀態:sleep...

終止狀態:現成飯結束 

1)如果執行緒一旦進入到阻塞狀態不會直接進入執行狀態,阻塞狀態解除要進入到就緒狀態

2)執行緒一旦結束,無法恢復,如果重新開啟,也是乙個新的執行緒

9.如何控制線程的終止:

1)呼叫stop(),destory(),已過時,不推薦

2)執行緒正常執行結束

3)新增標識控制

10.進入執行緒就緒狀態的幾種情況:

1)start()方法

2)yield 禮讓執行緒

3)執行緒之前切換

4)解除阻塞狀態,執行緒進入到就緒狀態

11.進入執行緒阻塞狀態的幾種情況:

1)sleep方法

2)join方法

3)wait方法

4)io操作

public class demo01 implements runnable

@override

public void run() catch (interruptedexception e)

if(i==0)else

} }}

12.鎖 塊  控制線程安全

鎖this就是鎖物件,鎖物件會鎖住這個物件中的所有成員(資源),如果只想鎖住其中的某個資源,可以只鎖這個資源;

鎖資源 一般就是指成員屬性,鎖一定要鎖不變的內容,物件的位址永遠不變,自定義的引用資料型別肯定能鎖住;

死鎖

public class web12306_04 implements runnable

try catch (interruptedexception e)

system.out.println(thread.currentthread().getname()+"買了第"+tickets.num--);

}} }

public static void main(string args)

}class ticket

13.執行緒通訊

wait(),notify(),notifyall()實現執行緒通訊,必須在乙個同步環境下使用。

ThreadPoolExecutor 多執行緒

from concurrent.futures import threadpoolexecutor,wait,all completed from queue import queue myqueue queue 佇列,用於儲存函式執行結果。多執行緒的問題之一 如何儲存函式執行的結果。def thr...

c 多線例項

using system using system.threading using system.text namespace controlthread 第二個執行緒正在執行,請輸入 s uspend,r esume,i nterrupt,or e xit.datetime.now.tostrin...

CLLocationManager在多執行緒下使用

似乎定位的返回 呼叫 只能有主線程來呼叫,並且這個物件還必須是在主線程建立的。做過以下實驗 1.子執行緒中 self.locationmanager cllocationmanager alloc init autorelease locationmanager.delegate self loca...