码迷,mamicode.com
首页 > 编程语言 > 详细

【Java并发核心四】Executor 与 ThreadPoolExecutor

时间:2018-10-15 14:33:44      阅读:177      评论:0      收藏:0      [点我收藏+]

标签:pool   inf   cut   最大数   实例   地方   cto   线程   分享图片   

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()));
                }
            });
        }

  运行结果:

  技术分享图片

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

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

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

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

 2、ThreadPoolExecutor 的使用:

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

【Java并发核心四】Executor 与 ThreadPoolExecutor

标签:pool   inf   cut   最大数   实例   地方   cto   线程   分享图片   

原文地址:https://www.cnblogs.com/klbc/p/9789985.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!