一.多執行緒
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...