java5線程池

1)創建固定大小線程池

  1. public class ThreadTest {  
  2.     public static void main(String[] args) {  
  3.         //ExecutorService executorService = Executors.newFixedThreadPool(2); //創建一個可重用固定線程數的線程池  
  4.         //ExecutorService executorService = Executors.newSingleThreadExecutor(); //創建單任務線程池  
  5.         ExecutorService executorService = Executors.newCachedThreadPool(); //創建一個可變尺寸的線程池  
  6.         Task task1 = new Task();  
  7.         Task task2 = new Task();  
  8.         Task task3 = new Task();  
  9.         executorService.execute(task1);  
  10.         executorService.execute(task2);  
  11.         executorService.execute(task3);  
  12.         executorService.shutdown();  
  13.     }  
  14. }  
  15.  
  16. class Task implements Runnable {  
  17.     public void run() {  
  18.         System.out.println(Thread.currentThread().getName() + " Hello");  
  19.     }  

對於大小固定的線程池,如:newFixedThreadPool(int size)和newSingeThreadExecutor(),當要加入的任務大於線程池的大小時,則任務需要排隊等待。

2)創建可變尺寸線程池

  1. public class ThreadTest {  
  2.     public static void main(String[] args) {  
  3.         ExecutorService executorService = Executors.newCachedThreadPool(); //創建一個可變尺寸的線程池  
  4.         Task task1 = new Task();  
  5.         Task task2 = new Task();  
  6.         Task task3 = new Task();  
  7.         executorService.execute(task1);  
  8.         executorService.execute(task2);  
  9.         executorService.execute(task3);  
  10.         executorService.shutdown();  
  11.     }  
  12. }  
  13.  
  14. class Task implements Runnable {  
  15.     public void run() {  
  16.         System.out.println(Thread.currentThread().getName() + " Hello");  
  17.     }  

3)創建延遲連接線程池

  1. public class ThreadTest {  
  2.     public static void main(String[] args) {  
  3.         ScheduledExecutorService executorService = Executors.newScheduledThreadPool(2);  
  4.         Task task1 = new Task();  
  5.         Task task2 = new Task();  
  6.         Task task3 = new Task();  
  7.         executorService.execute(task1);  
  8.         executorService.scheduleAtFixedRate(task2,0L,2,TimeUnit.HOURS); //此方法表示在指定的週期內循環執行task2任務,2表示循環的週期,TimeUtils.HOURS表示循                                                                                                                                                                 環週期的時間單位,此處是小時  
  9.         executorService.schedule(task3,10, TimeUnit.HOURS); //task2是實現Runnable接口的任務,10時延遲的時間,TimeUtil.HOURS是延遲時間的計量單位,在此處是小                                                                                                                                                     時  
  10.         executorService.shutdown();  
  11.     }  
  12. }  
  13.  
  14. class Task implements Runnable {  
  15.     public void run() {  
  16.         System.out.println(Thread.currentThread().getName() + " Hello");  
  17.     }  

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章