ThreadPoolExecutor使用例子


ThreadPoolExecutor使用例子:

public class Test1 {
 
     private ThreadPoolExecutor threadpool;
     
    /**
     * Param: 
     * corePoolSize - 池中所保存的線程數,包括空閑線程。 
     * maximumPoolSize - 池中允許的最大線程數(采用LinkedBlockingQueue時沒有作用)。 
     * keepAliveTime -當線程數大於核心時,此為終止前多余的空閑線程等待新任務的最長時間,線程池維護線程所允許的空閑時間。 
     * unit - keepAliveTime參數的時間單位,線程池維護線程所允許的空閑時間的單位:秒 。 
     * workQueue - 執行前用於保持任務的隊列(緩沖隊列)。此隊列僅保持由execute 方法提交的 Runnable 任務。 
     * RejectedExecutionHandler -線程池對拒絕任務的處理策略(重試添加當前的任務,自動重復調用execute()方法)
     */
      public Test1(){ 
        threadpool=new ThreadPoolExecutor(2, 10, 20, TimeUnit.SECONDS, new ArrayBlockingQueue(10), 
        new ThreadPoolExecutor.DiscardOldestPolicy()); 
      } 
      
      //add task into thread pool 
      public void submit(final int flag){ 
        threadpool.execute(new Runnable(){ 
          public void run(){ 
            try { 
              Thread.sleep(2000); 
            } catch (InterruptedException e) { 
              e.printStackTrace(); 
            } 
            System.out.println(flag + "   Hello"); 
          }
        });     
      } 
        
    /**
     * close thread pool
     */
    public void shutdown() {
        threadpool.shutdown();
    }
 
    public static void main(String[] args) {
        Test1 t = new Test1();
        for (int i = 0; i < 20; i++) {
            System.out.println("time:" + i);
            t.submit(i);
        }
        
        System.out.println(">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>");
    }
    
    /**
     * 當一個任務通過execute(Runnable)方法欲添加到線程池時:
     * 1.如果此時線程池中的數量小於corePoolSize,即使線程池中的線程都處於空閑狀態,也要創建新的線程來處理被添加的任務。
     * 2.如果此時線程池中的數量等於 corePoolSize,但是緩沖隊列 workQueue未滿,那么任務被放入緩沖隊列。
     * 3.如果此時線程池中的數量大於corePoolSize,緩沖隊列workQueue滿,並且線程池中的數量小於maximumPoolSize,建新的線程來處理被添加的任務。
     * 4.如果此時線程池中的數量大於corePoolSize,緩沖隊列workQueue滿,並且線程池中的數量等於maximumPoolSize,那么通過
     * handler所指定的策略來處理此任務。也就是:處理任務的優先級為:核心線程corePoolSize、任務隊列workQueue、最大線程maximumPoolSize
     * ,如果三者都滿了,使用handler處理被拒絕的任務。 
     * 
     * 5.當線程池中的線程數量大於corePoolSize時,如果某線程空閑時間超過keepAliveTime,線程將被終止。這樣,線程池可以動態的調整池中的線程數。
     */
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM