//多執行緒的實現方式
//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...