线程池ExecutorService

转载:线程池ExecutorService_executorservice executor = executors.newcachedthre_Java小生不才的博客-CSDN博客

 1、缓存型线程池(CachedThreadPool)

   Executors.newCacheThreadPool():可缓存线程池,先查看线程池中有没有之前创建的线程,如果有则直接使用。否则就新创建一个新的线程加入线程池中,我们经常用此类线程池来执行一些业务处理时间很短的任务。

2、demo

    class Task implements Runnable {
        private String name;
 
        public Task(String name) {
            this.name = name;
        }
 
        @Override
        public void run() {
           //实际的业务处理
            System.out.println(name + "开始执行"]...");
        }
    }
 
    /**
//   * @param args
     */
    public static void main(String[] args) throws ExecutionException, InterruptedException {
       //调用工厂类的静态方法,创建线程池对象
       ExecutorService executorService = Executors.newCachedThreadPool();
       //调用接口实现类对象es中的方法submit提交线程任务
       executorService.submit(new Task("name"));
    }

3、创建方式

  • Executors
  • ThreadPoolExecutor
package com.atguigu.gulimall.search.thread;

import java.util.concurrent.*;

/**
 *
 */
public class ThreadPoolDemo {
    /**
     * 线程池ExecutorService
     * 1.创建方式
     * a.Executors
     * b.ThreadPoolExecutor
     */
    public static void main(String[] args) {
        /**
         * 方式1
         */
        //1.1.创建一个可缓存线程池,如果线程池长度超过处理需要,可灵活回收空闲线程,若无可回收,则新建线程。
//        ExecutorService executorService = Executors.newCachedThreadPool();
        //1.2.创建一个定长线程池,可控制线程最大并发数,超出的线程会在队列中等待
//        ExecutorService executorService = Executors.newFixedThreadPool(10);
        //1.3.创建一个定长线程池,支持定时及周期性任务执行
//        ScheduledExecutorService scheduledExecutorService = Executors.newScheduledThreadPool(10);
        //1.4.创建一个单线程化的线程池,它只会用唯一的工作线程来执行任务,保证所有任务按照指定顺序(FIFO, LIFO, 优先级)执行
        ExecutorService executorService = Executors.newSingleThreadExecutor();


        /**
         * 方式2
         */
        ThreadPoolExecutor threadPoolExecutor = new ThreadPoolExecutor(
                5,200,10,
                TimeUnit.SECONDS,new LinkedBlockingDeque<>(10000),
                Executors.defaultThreadFactory(),new ThreadPoolExecutor.AbortPolicy());
    }
}

 4、工作顺序

a.线程池创建,准备好core数量的核心线程,准备接收任务
b.如果核心线程满了,将再进来的任务放在阻塞队列中,空闲的core就会自己去阻塞队列中获取任务执行
c.如果阻塞队列满了,就直接开新线程执行,最大能开到max指定的数量
d.如果max满了,就RejectedExecutionHandler拒绝任务
e.max执行完成,有很多空闲,在指定的时间keepAliveTime后,释放maximumPoolSize-corePoolSize
 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值