参考 https://www.cnblogs.com/zhaoyan001/p/7049627.html
0. Executor框架
Executor框架包括:
- 线程池
- Executor
- Executors
- ExecutorService
- CompletionService
- Future
- Callable
异步执行框架
任务的提交过程和执行过程解耦开发,基于生产者-消费者模式
1. java原生线程池:
有4种,都是在ThreadPoolExecutor的方法上面封装的:
- FixedThreadPool
- CachedThreadPool
- SingleThreadExecutor
- ScheduledThreadPool
ExecutorService service = Executors.newFixedThreadPool(2);
// 创建线程对象
MyRunnable myRunnable = new MyRunnable();
Thread thread = new Thread(myRunnable);
// 以前是直接thread.start()
// 现在是线程池写法:线程池submit线程
Future<?> future = service.submit(thread);
service.submit(thread);
service.submit(thread);
Thread.sleep(5000);
System.out.println(future);// java.util.concurrent.FutureTask@55f96302
service.shutdown();
2. 原始接口----ThreadPoolExecutor
para | 含义 |
---|---|
corePoolSize | 线程池核心线程数 |
maximumPoolSize | 线程池最大数 |
keepAliveTime | 空闲线程存活时间 |
unit | 时间单位 |
workQueue | 线程池所使用的缓冲队列 |
threadFactory | 线程池创建线程使用的工厂 |
handler | 线程池对拒绝任务的处理策略 |
3. Executors
提供了一系列静态工厂方法用于创建各种线程池
- newFixedThreadPool:创建可重用且固定线程数的线程池,如果线程池中的所有线程都处于活动状态,此时再提交任务就在队列中等待,直到有可用线程;如果线程池中的某个线程由于异常而结束时,线程池就会再补充一条新线程。
- newSingleThreadExecutor:创建一个单线程的Executor,如果该线程因为异常而结束就新建一条线程来继续执行后续的任务
- newScheduledThreadPool:创建一个可延迟执行或定期执行的线程池
- newCachedThreadPool:创建可缓存的线程池,如果线程池中的线程在60秒未被使用就将被移除,在执行新的任务时,当线程池中有之前创建的可用线程就重用可用线程,否则就新建一条线程
【补充】
BlockingQueue阻塞队列
1.继承:queue的泛型
2.添加:add/offer 都是返回是否成功,限长用offer;put:如果满了 该方法会阻塞;offer可以设定添加时间
3.取出:take/poll take如果没有会阻塞直到有,poll可以设定时间调用他take
4.其他功能:移除指定的值,显示剩余空间,是否有这个值,将全部元素移除到一个collection
5.常见子类型:ArrayBlockingQueue,LinkedBlockingQueue,DelayQueue
版权声明:本文为qq_33907408原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。