IT袋

当前位置:主页 > 经验教程 > 建站编程 >

常见线程池类型与应用场景

常见线程池类型与应用场景 线程池类型及其典型应用场景(2)

时间:2023-11-27 22:25:19 来源:IT袋 作者:马勇
导读:常见线程池类型与应用场景,可缓存线程池 public static ExecutorService newCachedThreadPool() { return new ThreadPoolExecutor(0, Integer.MAX_VALUE, 60L, TimeUnit.SECONDS, n ew SynchronousQueue>()); } 核心线程数为0 最大

常见线程池类型与应用场景

  1. 可缓存线程池
public static ExecutorService newCachedThreadPool() {
        return new ThreadPoolExecutor(0,
                                    Integer.MAX_VALUE, 
                                    60L,
                                    TimeUnit.SECONDS, n
                                    ew SynchronousQueue<>());
    }
  • 核心线程数为0
  • 最大线程数是Integer.MAX_VALUE
  • 阻塞队列为SynchronousQueue:不存储元素的阻塞队列,每个插入操作都必须等待一个移出操作
  • 适用场景:适合任务数比较密集,但每个任务执行时间较短的情况
  • 案例:
/**
 * @author springboot葵花宝典
 * @description: TODO
 */
public class CachedThreadPoolTest {
    static class Demo implements Runnable {
        @Override
        public void run() {
            String name = Thread.currentThread().getName();
            try {
                //修改睡眠时间,模拟线程执行需要花费的时间
                Thread.sleep(100);
                System.out.println(name + "执行完了");
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }
    public static void main(String[] args) throws InterruptedException {
        //创建一个缓存的线程,没有核心线程数,最大线程数为Integer.MAX_VALUE
        ExecutorService exec = Executors.newCachedThreadPool();
        for (int i = 0; i < 10; i++) {
            exec.execute(new Demo());
            Thread.sleep(1);
        }
        exec.shutdown();
    }
}

4.提供了“延迟”和“周期执行”功能的ThreadPoolExecutor

public ScheduledThreadPoolExecutor(int corePoolSize,
                                   ThreadFactory threadFactory,
                                   RejectedExecutionHandler handler{
 super(corePoolSize, Integer.MAX_VALUE, 0, NANOSECONDS, new DelayedWorkQueue(), threadFactory, handler);                     
}
  • 适用场景:有定时和延迟执行的任务
  • 案例
/**
 * @author springboot葵花宝典
 * @description: TODO
 */
public class ScheduledThreadPoolTest {
    static class Task implements Runnable {
        @Override
        public void run() {
            try {
                String name = Thread.currentThread().getName();
                System.out.println(name + ", 开始:" + new Date());
                Thread.sleep(1000);
                System.out.println(name + ", 结束:" + new Date());
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }
    public static void main(String[] args) throws InterruptedException {
        //按照周期执行的线程池,核心线程数为2,最大线程数为Integer.MAX_VALUE
        ScheduledExecutorService scheduledThreadPool = Executors.newScheduledThreadPool(2);
        System.out.println("程序开始:" + new Date());
        /**
         * schedule 提交任务到线程池中
         * 第一个参数:提交的任务
         * 第二个参数:任务执行的延迟时间
         * 第三个参数:时间单位
         */
        scheduledThreadPool.schedule(new Task(), 0, TimeUnit.SECONDS);
        scheduledThreadPool.schedule(new Task(), 1, TimeUnit.SECONDS);
        scheduledThreadPool.schedule(new Task(), 5, TimeUnit.SECONDS);
        Thread.sleep(5000);
        // 关闭线程池
        scheduledThreadPool.shutdown();
    }
}

以上就是IT袋网带来的常见线程池类型与应用场景的相关内容,希望对您有所帮助!

相关阅读

  • 什么是城域网络 其优缺点有哪些?

    什么是城域网络 其优缺点有哪些?

    为关注IT袋网网的网友们详解什么是城域网络的相关介绍,接下来分享详细内容。 城域网络,又被称为城域网或MAN,是指覆盖一个城市或地区的网络。 它通常用于连接一个城市内的各种设施,

  • 搜索引擎是如何工作的 搜索引擎的工作原理

    搜索引擎是如何工作的 搜索引擎的工作原理

    搜索引擎是如何工作的?搜索引擎的工作原理是什么? 可能很多新手站长都是不清楚的,下面IT袋小编就给大家分享 简述搜索引擎的工作原理! 搜索引擎的基本工作原理包括如下三个过程:首

  • 链路聚合bond接口常见的类型有哪些?

    链路聚合bond接口常见的类型有哪些?

    今天小编详解链路聚合bond接口常见的类型有哪些的电脑方面的小经验,很不错的方法小知识,建议收藏哦! bond接口是一种将多个物理网卡绑定成一个逻辑网卡的网络技术,它可以提高网络的

  • 广州在线网页制作工具 网站免费制作平台

    广州在线网页制作工具 网站免费制作平台

    跟大家说一说广州在线网页制作工具和网站免费制作平台的教程内容,具体介绍如下: 最简单的网页制作软件:其实我们完全可以利用办公软件来设计网页,只要网页内容不太复杂或只涉及静