package com.dci.api.listener;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.TimeUnit;
public class MyThreadPool {
public static void createPool() {
/**
* 通过工厂方法newFixedThreadPool(线程数)创建一个ExecutorService线程池
*/
ExecutorService executor = Executors.newFixedThreadPool(10);
int waitTime = 500;
// System.out.println("queue数"+TaskCallAPI.queue.size());
if (Myqueue.size() > 0) {
//这个for循环里的代码就是从线程池里获得线程对象,并执行多线程操作
for (int i = 0; i < Myqueue.size() + 2; i++) {//开启一个新的线程异步执行队列中的任务
Runnable runner = new ExecutorThread(Myqueue.poll());
executor.execute(runner);
}
}
try {
executor.shutdown();// 只是将线程池置于关闭状态,不接受新任务,对正在运行的任务不影响
executor.awaitTermination(waitTime, TimeUnit.MILLISECONDS);//MILLISECONDS毫秒
} catch (InterruptedException ignored) {
}
}
}
通过以上比较可知,用Executor框架执行任务的好处如下:
1、能够实现高并发和低延迟。
2、因为Executor的实现类可以很好的管理其线程的创建数量,可能任务提交给Executor的时候,已经有可以执行此任务的线程了,这样减少了
线程创建带来的延迟。因为Executor实例限制了,创建线程的数量,减少了线程之间对CPU的竞争,也在一定程度上提高了系统性能。对线程创建数量的限制,保证了系统的稳定性。
3、更加灵活的执行策略,因为Executor实现了任务的提交和执行的解耦,可以让我们灵活的更换任务的执行策略。
4、继承Executor接口的ExecutorService增加了生命周期的管理,更加贴近真实的生产开发。
作者:POPMUISE
链接:https://www.imooc.com/article/34127
来源:慕课网