代码语言:javascript复制
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/windwant-demo/tree/master/thread-demo