多執行緒問題

2021-08-18 18:24:14 字數 1350 閱讀 8710

//多執行緒的實現方式

//1.繼承thread類

//2.實現runnable介面

//3.實現callable介面

//資源類實現callable介面,main方法中

futuretask ft = new futuretask//(實現callable介面的資源類的物件);

new thread(ft,threadname).start();

//4.執行緒池executors

executors.newfixedthreadpool(int number);//一池多執行緒(int 型的number指定建立執行緒的數量)

executors.newsinglethreadexecutors();//(一池一線程)

executors.newcachedthreadpool();//(一池多執行緒,系統判斷何時建立新的執行緒供系統呼叫)

future = service.submit( () -> );

scheduledexecutorsservice service = executors.newscheduledthreadpool(int number);

//(一池多執行緒,int型的number指定建立執行緒的數量)

service.schedule( () -> , 2, timeunit.seconds);

執行緒的幾種狀態

new 狀態是指執行緒剛建立, 尚未啟動

runnable 狀態是執行緒正在正常執行中, 當然可能會有某種耗時計算/io等待的操作/cpu時間片切換等, 這個狀態下發生的等待一般是其他系統資源, 而不是鎖, sleep等

blocked  這個狀態下, 是在多個執行緒有同步操作的場景, 比如正在等待另乙個執行緒的synchronized 塊的執行釋放, 或者可重入的 synchronized塊裡別人呼叫wait() 方法, 也就是這裡是執行緒在等待進入臨界區

waiting  這個狀態下是指執行緒擁有了某個鎖之後, 呼叫了他的wait方法, 等待其他執行緒/鎖擁有者呼叫 notify / notifyall 一遍該執行緒可以繼續下一步操作, 這裡要區分 blocked 和 wating 的區別, 乙個是在臨界點外面等待進入, 乙個是在理解點裡面wait等待別人notify, 執行緒呼叫了join方法 join了另外的執行緒的時候, 也會進入waiting狀態, 等待被他join的執行緒執行結束

timed_waiting  這個狀態就是有限的(時間限制)的waiting, 一般出現在呼叫wait(long), join(long)等情況下, 另外乙個執行緒sleep後, 也會進入timed_waiting狀態

terminated 這個狀態下表示 該執行緒的run方法已經執行完畢了, 基本上就等於死亡了(當時如果執行緒被持久持有, 可能不會被**)

多執行緒問題

問題描述 有4個執行緒和1個公共的字元陣列。執行緒1的功能就是向陣列輸出a,執行緒2的功能就是向字元輸出b,執行緒3的功能就是向陣列輸出c,執行緒4的功能就是向陣列輸出d。要求按順序向陣列賦值abcdabcdabcd,abcd的個數由執行緒函式1的引數指定。注 c語言選手可使用windows sdk...

多執行緒問題

程式 是由多個程序組成的。可以理解為靜態的 程序 可以理解為執行中的程式。執行緒 是組成程序的單元,乙個程序中有多個執行緒。我們經常把執行緒看做是程序中的某乙個任務。方式一 繼承乙個thread類 方式二 實現乙個runnable介面 兩種方式相比較,哪個能好點那?一般建議是實現runnable介面...

多執行緒問題

執行緒先達到corepoolsize,達到了去排隊 佇列滿了就去新建執行緒,達到了maxpoolsize 就執行拒絕策略了。所以大家在取queuesize的時候,就要取getthreadpoolexecutor getpoolsize getthreadpoolexecutor getqueue s...