執行緒併發庫的應用之執行緒池

2021-09-01 13:28:06 字數 1690 閱讀 8074

public static void main(string args)catch(interruptedexception e)

system.out.println(thread.currentthread().getname()+" is loop of "+j+" of task "+tasknum);}}

});}

system.out.println("all of the five threads are done!");

// threadpool.shutdown();//等所有執行緒都空著了(閒了)就關閉執行緒池

// threadpool.shutdownnow();//shutdownnow意味著直接關閉當前的執行緒池,不管是否還有執行緒在進行

}

使用shutdow()和shutdownnow()方法進行關閉執行緒池的兩種情況截圖:

shutdown();三個執行緒分別將三個任務執行完之後,去執行剩下的兩個任務(i最大值=5)直到所有的任務都被執行完,所有的執行緒空閒,就關閉執行緒池。

shutdownnow();只要池中的執行緒數執行一遍,就關閉執行緒池,不論任務有幾個。本例中就是三個執行緒只執行三個任務,執行45任務的時候就會因異常而中斷。

將固定執行緒池改為快取執行緒池,將shutdow()都注釋掉:

executorservice threadpool=executors.newcachedthreadpool();

此時執行緒池中的五個執行緒都會執行迴圈。

建立乙個單一的執行緒池:

//建立乙個單一的執行緒池,乙個執行緒死掉之後會重新找乙個新的執行緒去替補。

用執行緒池啟動定時器:

1.每隔固定時間執行一次:

2.固定時間後只執行一次:

需要提醒大家的是:定時器中可以指定任意時間(datetime)執行執行緒,但是執行緒池中沒有這個方法,所以要想指定某乙個特定時間,只能將引數中的delay設定為date.gettime()- system.currenttimemillis()。其實只是設定起來有點麻煩,效果還是能達到的。

注意上面兩個scheduledexecutorservice要記得shutdown,不然執行緒會一直執行下去。

corepoolsize決定了執行緒池中有幾個執行緒可以去執行該定時任務。

併發 執行緒池

學習 1.先大綱,然後思路優先 適當的提出問題 2.合理推測 完成上述需要知識,為了熟悉執行緒池,提出一些問題 1.執行緒什麼時候建立?2.執行緒池主要做什麼?3.無任務執行處於什麼狀態?4.提交乙個任務,執行邏輯?5.執行緒池怎樣被銷毀?回答問題 1.執行緒在執行 excute方法 中,做系列判斷...

併發實踐 執行緒池

class threadpool if stop break task tasks.front tasks.pop 必須在解鎖後再呼叫 task 建立執行緒並啟動 for int i 0 i cntthread i threadpool template typename f,typename.ar...

併發7 執行緒池

用優雅的方式理解和使用執行緒池 執行緒池的目的 1 減少系統維護執行緒的開銷 2 解耦,執行和建立分開 3 執行緒可以復用 執行緒池的使用 1 介面executor 提供方法execute runnable 執行執行緒命令 2 介面executorservice 提供方法shutdown 啟動一次順...