自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

Java線程池在使用中的問題解疑

開發(fā) 后端
Java線程池如何才能更好的使用呢?這個(gè)問題需要大家不斷的努力,這完全是需要我們?cè)敿?xì)的學(xué)習(xí)相關(guān)的技術(shù)知識(shí)。希望大家有所收獲。

Java線程池需要我們不斷的學(xué)習(xí),其實(shí)我們?cè)谑褂玫臅r(shí)候還是有不少問題需要我們解決。我們實(shí)現(xiàn)了一個(gè)簡單的Java線程池?,F(xiàn)在我們就可以使用它了,下面的代碼做了一個(gè)簡單的示例:

Java代碼

  1. public class SimpleTaskTest extends Task {   
  2. @Override   
  3. public void deal() {   
  4. // do something   
  5. }   
  6. public static void main(String[] args) throws InterruptedException {   
  7. ThreadPoolService service = new ThreadPoolService();   
  8. service.start();   
  9. // 執(zhí)行十次任務(wù)   
  10. for (int i = 0; i < 10; i++) {   
  11. service.runTask(new SimpleTaskTest());   
  12. }   
  13. // 睡眠1秒鐘,等待所有任務(wù)執(zhí)行完畢   
  14. Thread.sleep(1000);   
  15. service.stop();   
  16. }   
  17. }   
  18. public class SimpleTaskTest extends Task {  
  19. @Override  
  20. public void deal() {  
  21. // do something  
  22. }  
  23. public static void main(String[] args) throws InterruptedException {  
  24. ThreadPoolService service = new ThreadPoolService();  
  25. service.start();  
  26. // 執(zhí)行十次任務(wù)  
  27. for (int i = 0; i < 10; i++) {  
  28. service.runTask(new SimpleTaskTest());  
  29. }  
  30. // 睡眠1秒鐘,等待所有任務(wù)執(zhí)行完畢  
  31. Thread.sleep(1000);  
  32. service.stop();  
  33. }  

 

當(dāng)然,我們實(shí)現(xiàn)的是最簡單的,這里只是為了演示Java線程池的實(shí)現(xiàn)原理。在實(shí)際應(yīng)用中,根據(jù)情況的不同,可以做很多優(yōu)化。比如:

調(diào)整任務(wù)隊(duì)列的規(guī)則,給任務(wù)設(shè)置優(yōu)先級(jí),級(jí)別高的任務(wù)優(yōu)先執(zhí)行。
動(dòng)態(tài)維護(hù)Java線程池,當(dāng)待執(zhí)行任務(wù)數(shù)量較多時(shí),增加線程的數(shù)量,加快任務(wù)的執(zhí)行速度;當(dāng)任務(wù)較少時(shí),回收一部分長期閑置的Java線程池,減少對(duì)系統(tǒng)資源的消耗。

事實(shí)上Java5.0及以上版本已經(jīng)為我們提供了線程池功能,無需再重新實(shí)現(xiàn)。這些類位于java.util.concurrent包中。

Executors類提供了一組創(chuàng)建Java線程池對(duì)象的方法,常用的有一下幾個(gè):

Java代碼

  1. public static ExecutorService newCachedThreadPool() {   
  2. // other code   
  3. }   
  4. public static ExecutorService newFixedThreadPool(int nThreads) {   
  5. // other code   
  6. }   
  7. public static ExecutorService newSingleThreadExecutor() {   
  8. // other code   
  9. }   
  10. public static ExecutorService newCachedThreadPool() {  
  11. // other code  
  12. }  
  13. public static ExecutorService newFixedThreadPool(int nThreads) {  
  14. // other code  
  15. }  
  16. public static ExecutorService newSingleThreadExecutor() {  
  17. // other code  

 

newCachedThreadPool()方法創(chuàng)建一個(gè)動(dòng)態(tài)的線程池,其中線程的數(shù)量會(huì)根據(jù)實(shí)際需要來創(chuàng)建和回收,適合于執(zhí)行大量短期任務(wù)的情況;newFixedThreadPool(int nThreads)方法創(chuàng)建一個(gè)包含固定數(shù)量線程對(duì)象的Java線程池,nThreads代表要?jiǎng)?chuàng)建的線程數(shù),如果某個(gè)線程在運(yùn)行的過程中因?yàn)楫惓6K止了,那么一個(gè)新的線程會(huì)被創(chuàng)建和啟動(dòng)來代替它;而newSingleThreadExecutor()方法則只在線程池中創(chuàng)建一個(gè)線程,來執(zhí)行所有的任務(wù)。

【編輯推薦】

  1. Java線程池如何體現(xiàn)自己的用途
  2. Java多線程同步如何從JVM的角度體會(huì)
  3. Java多線程同步機(jī)制的深入探討
  4. 深入Java虛擬機(jī):JVM中的Stack和Heap
  5. 兩種JavaScript解析引擎性能對(duì)比談
責(zé)任編輯:張浩 來源: CSDN
相關(guān)推薦

2009-12-07 10:05:22

PHP session

2009-12-02 19:14:07

PHP header

2009-02-04 18:20:42

服務(wù)器虛擬化VMware

2009-12-31 15:28:02

Silverlight

2010-01-04 13:15:33

跨域引用Silverl

2010-02-05 16:07:52

C++多態(tài)覆蓋

2010-02-02 13:20:33

C++對(duì)象傳遞

2009-12-03 15:13:51

PHP開發(fā)中問題

2021-09-11 15:26:23

Java多線程線程池

2012-02-29 13:26:20

Java

2010-01-04 15:27:45

Silverlight

2009-12-01 15:41:16

PHP substr截

2010-01-20 14:52:21

VB.NET修改數(shù)據(jù)窗

2009-11-27 10:02:54

PHP mb_strw

2025-02-26 07:26:29

2010-05-24 14:04:48

JavaSwing多線程

2021-12-07 08:31:48

線程池中間件開源

2012-05-15 02:18:31

Java線程池

2009-12-08 10:33:23

PHP應(yīng)用問題

2015-03-24 16:29:55

默認(rèn)線程池java
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)