【Java并发核心四】Executor 与 ThreadPoolExecutor

Executor ThreadPoolExecutor 实现的是线程池,主要作用是支持高并发的访问处理。

Executor 是一个接口,与线程池有关的大部分类都实现了此接口。

ExecutorService 是 Executor 的子接口;AbstractExecutorService 是 ExecutorService 的实现类,但是是抽象类。

ThreadPoolExecutor 是 AbstractExecutorService 的子类,可实例化。

Executors 是一个工厂类,用于创建线程池。

1、Executors 的 使用:

  (1) newCachedThreadPool()  返回 ExecutorService 实例,创建*限线程池,理论上线程最大个数是 Integer.MAX_VALUE,使用举例:

     final SimpleDateFormat sf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS");
ExecutorService executorService = Executors.newCachedThreadPool();
// 此线程池运行5个线程
for (int i = 0; i < 5; i++) {
final int index = i;
executorService.execute(new Runnable() {
@Override
public void run() {
System.out.println("Thread-" + index + "-begin-" + sf.format(new Date()));
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("Thread-" + index + "-end-" + sf.format(new Date()));
}
});
}

  运行结果:

  【Java并发核心四】Executor 与 ThreadPoolExecutor

  从上图可以看出,线程在execute 加载后,基本是并发执行的,并非顺序执行。

  (2) newFixedThreadPool(int)  返回 ExecutorService 实例,创建的是有界线线程池,即线程个数可以指定最大数量,如果超过最大数量,则后加入的线程需要等待。

    还有api:newFixedThreadPool(int , ThreadFactory),newCachedThreadPool( ThreadFactory ) 方法同理。

  (3) newSingleThreadExecutor() 创建单一线程池,实现以队列的方式来执行任务。

2、ThreadPoolExecutor 的使用:

  Executors 工厂类中,很多地方是调用的 ThreadPoolExecutor 来实现的,单独调用 ThreadPoolExecutor 要考虑的相对要多一些但也更灵活。

上一篇:多线程编程(六)-Executor与ThreadPoolExecutor的使用


下一篇:你必须知道的10个提高Canvas性能技巧