线程池ExecutorService

文章介绍了Java中的ExecutorService线程池服务,特别是CachedThreadPool的使用,它会复用已有线程或创建新线程来执行任务。通过示例代码展示了如何创建和使用线程池,并提到了线程池的工作顺序,包括核心线程、阻塞队列、最大线程和拒绝策略等关键概念。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

 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
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值