執行緒 六 執行緒池

2021-07-14 03:55:03 字數 3088 閱讀 3901

1.可重用的固定集合執行緒池,以共享的無界佇列的方式來執行這些執行緒

executerservice threadpool = executors.newfixedthreadpool(3);  //容納固定的執行緒

這個執行緒就是建立乙個固定大小的執行緒池,等待任務來的時候就取執行緒池中的執行緒進行任務的執行,這個的好處呢我們大家也是很容易明白的,就是實現建立好了幾個執行緒,至於什麼時候用就靜待任務的到來了.這個就是我們執行緒池的基本思想了,我們實現準備好,你來了就直接執行,不需要來了再建立乙個執行緒,這樣的話是不是比較方便和節省時間呢,我們來看一下執行緒執行的效果把:

* created by luyangli on 16-6-29.

*/public class

filedthreadpolltest catch (interruptedexception e)

system.out

.println("

任務:" + threadid + "

執行了" + i + "

次");

} }

});} }

}

我們來看一下執行結果:
任務:0執行了0次

任務:1執行了0次

任務:2執行了0次

任務:0執行了1次

任務:1執行了1次

任務:2執行了1次

任務:0執行了2次

任務:1執行了2次

任務:2執行了2次

任務:0執行了3次

任務:2執行了3次

任務:1執行了3次

任務:0執行了4次

任務:2執行了4次

任務:1執行了4次

任務:3執行了0次

任務:4執行了0次

任務:3執行了1次

任務:4執行了1次

我們可以看到的是,執行緒都是三三一對進行執行的,為什麼呢,應為我們是啟動了5個任務,每個任務執行5 次,那麼三個執行緒池,肯定是佔得滿滿的,每一次都是三個執行,然後執行緒執行前三個任務執行完畢之後在執行後面的2個任務

2.可在需要的時候建立乙個新的執行緒,以前建立的執行緒可以重用

executerservice threadpool = executor.newcachedthreadpool();  //需要的時候建立,可動態分配

這個執行緒池就是需要幾個我們就開闢幾個執行緒,然後一起執行,我們看一下

public class catchthreadpolltest  catch (interruptedexception e) 

system.out

.println("

任務:" + threadid + "

執行了" + i + "

次");

} }

});} }

}

我們可以看到我們並沒有執行開闢幾個執行緒但是這個是需要幾個我們就開闢幾個 ,我們來看一下執行效果:
任務:1執行了0次

任務:2執行了0次

任務:3執行了0次

任務:4執行了0次

任務:5執行了0次

任務:1執行了1次

任務:2執行了1次

任務:3執行了1次

任務:4執行了1次

任務:5執行了1次

任務:2執行了2次

任務:1執行了2次

任務:3執行了2次

任務:4執行了2次

任務:5執行了2次

任務:2執行了3次

任務:1執行了3次

任務:3執行了3次

任務:4執行了3次

任務:5執行了3次

任務:2執行了4次

任務:1執行了4次

任務:3執行了4次

任務:4執行了4次

任務:5執行了4次

每次都是5個任務一起執行哦

3.建立乙個單個工作執行緒的executer,以無界佇列方式執行該執行緒,

executerservice threadpool = executor.newsinglethreadexecutor(); //建立乙個執行緒的執行緒池,當當前執行緒執行任務中斷的時候在建立乙個新的執行緒來接著執行該任務

那麼黨我們需要乙個執行緒執行的時候呢,就是是用這個singlethreadexecutor執行緒池思想他呢會在任務中斷的時候,重新開闢乙個執行緒,繼續接著上面的執行緒執行的.

*/

public class singlethreadpolltest catch (interruptedexception e)

while (i == 3) catch (exception e)

}system.out

.println("

任務:" + thread.currentthread().getname() + "

執行了" + i + "

次");

} }

});}}

我們開闢了乙個執行緒執行這個任務,當任務執行到第四邊的時候這個執行緒中斷了,按照我們的思想,這個執行緒池會在建立乙個執行緒繼續幫主我們執行完畢:
任務:pool-1-thread-1執行了0次

任務:pool-1-thread-1執行了1次

任務:pool-1-thread-1執行了2次

丟擲異常中斷執行緒

任務:pool-1-thread-1執行了4次

我們可以看到第三次是中斷了,但是執行緒池馬上又給我們啟動了乙個新的執行緒執行該任務了

4.建立乙個可以安排給定時延時後的任務執行的執行緒池

scheduleexecuterservice threadpool = executor.newschedulethreadpool(3); 

還有一種就是執行定時任務的執行緒:

public class schedulethreadpolltest 

}, 5, timeunit.seconds

);executorservice.scheduleatfixedrate(new runnable()

}, 5,

2, timeunit.seconds);}

}

這個呢我們可以聯想到我們的timer和timertask

Java多執行緒(六) 執行緒讓步

一 yield 介紹 yield 的作用是讓步。它能讓當前執行緒由 執行狀態 進入到 就緒狀態 從而讓其它具有相同優先順序的等待執行緒獲取執行權 但是,並不能保證在當前執行緒呼叫yield 之後,其它具有相同優先順序的執行緒就一定能獲得執行權 也有可能是當前執行緒又進入到 執行狀態 繼續執行!二 y...

多執行緒複習 六 執行緒的通訊

一 說明 採用一定的方式,讓執行緒之間進行交流,最終達到控制線程的目的 二 通訊中用到的api 注意 以下為object類的方法 1 wait 語法 物件名.wait 注意 該物件為鎖物件,如果鎖物件為this,實際上可以省略 特點 讓當前執行緒等待,直到其他執行緒呼叫了該鎖物件下的notify或n...

CUDA 學習(六) 執行緒網格

一 概述 乙個執行緒網格是由若干執行緒塊組成的,每個執行緒塊是二維 三維的,擁有x軸 y軸 z軸。此時,每次最多能開啟y x z t 個執行緒。通常執行緒塊中線程數量最好是乙個執行緒束大小的整數倍,即32 的整數倍。由於裝置是整個執行緒束為單位進行排程,如果我們不把執行緒塊上的執行緒數目設成32的整...