程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> JAVA綜合教程 >> Java並發之ThreadPoolExecutor 線程執行服務,java多線程並發執行

Java並發之ThreadPoolExecutor 線程執行服務,java多線程並發執行

編輯:JAVA綜合教程

Java並發之ThreadPoolExecutor 線程執行服務,java多線程並發執行


 1 package com.thread.test.thread;
 2 
 3 import java.util.concurrent.ExecutorService;
 4 import java.util.concurrent.LinkedBlockingQueue;
 5 import java.util.concurrent.RejectedExecutionHandler;
 6 import java.util.concurrent.ThreadLocalRandom;
 7 import java.util.concurrent.ThreadPoolExecutor;
 8 import java.util.concurrent.TimeUnit;
 9 
10 /**
11  * ThreadPoolExecutor
12  * 通過線程池執行所提交的任務的ExecutorService,通常由Executors生成
13  * 執行高並發任務比較高效,因為減少了任務的穿行等待時間,同時很好的管理著執行需求的資源,包括線程,
14  * 通常,維護者一些基礎的任務執行數據,例如已完成任務數量
15  *
16  * ThreadPoolExecutor有許多可調正的參數,可以適用於不同的用途,但是通常我們使用
17  * Executors#newCachedThreadPool 無容量限制,線程自動回收
18  * Executors#newFixedThreadPool 固定容量線程池
19  * Executors#newSingleThreadExecutor 單線程
20  * 等為許多通用場景預置了很多參數,
21  *
22  * Hello world!
23  *
24  */
25 public class ThreadPoolFactoryTest
26 {
27     public static void main( String[] args )
28     {
29         /**
30          * @ int corePoolSize:線程池中維護的線程數量,生命周期同線程池,除非設置了allowCoreThreadTimeOut
31          * @ int maximumPoolSize:允許的最大數量
32          * @ long keepAliveTime:允許的最大存活時間
33          * @ TimeUnit unit:單位
34          * @ BlockingQueue<Runnable> workQueue:存儲等待執行任務,execute提交的Runnable類型任務
35          * @ RejectedExecutionHandler handler:線程阻塞,隊列已滿時執行的操作
36          */
37         ExecutorService enew = new ThreadPoolExecutor(5, 20, 0L,
38                 TimeUnit.SECONDS,
39                 new LinkedBlockingQueue<Runnable>(),
40         new RejectedExecutionHandler() {
41                     public void rejectedExecution(Runnable r, ThreadPoolExecutor executor) {
42                         System.out.println("this is the exception execution begin");
43                         executor.execute(r);
44                         System.out.println("this is the exception execution end");
45                     }
46                 });
47 
48         for (int i = 0; i < 100; i++) {
49             enew.execute(new Runnable() {
50                 public void run() {
51                     int l = ThreadLocalRandom.current().nextInt();
52                     System.out.println("task..." + l + "begin");
53                     try {
54                         Thread.sleep(2000);
55                         System.out.println("task..." + l + "end");
56                     } catch (InterruptedException e) {
57                         e.printStackTrace();
58                     }
59                 }
60             });
61         }
62         System.out.println("add end...");
63     }
64 }

項目地址:https://github.com/windwant/threadtest

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved