前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >线程池基础使用案例

线程池基础使用案例

原创
作者头像
JokerDJ
发布2023-11-27 12:46:08
1450
发布2023-11-27 12:46:08
举报
文章被收录于专栏:JokerDJ

创建一个线程池的使用工具类

线程池使用工具类

代码语言:java
复制
import java.util.concurrent.*;


public class ThreadPoolUtil {

   /* public static ExecutorService getThreadPoolExecutor(int size, int maxSize){
        return new ThreadPoolExecutor(
                size,
                maxSize,
                3,
                TimeUnit.SECONDS,
                new LinkedBlockingDeque<>(3),
                Executors.defaultThreadFactory(),
                new ThreadPoolExecutor.DiscardOldestPolicy());
    }
    public static ExecutorService getThreadPoolExecutor(int size, int maxSize) {
        int keepAliveTime = 60; // 线程的最大空闲时间(单位:秒)
        int queueCapacity = 100; // 阻塞队列的容量

        // 创建线程池
        ThreadPoolExecutor threadPoolExecutor = new ThreadPoolExecutor(
                size, maxSize, keepAliveTime, TimeUnit.SECONDS,
                new LinkedBlockingQueue<>(queueCapacity));

        // 设置拒绝策略为调用线程执行任务
        threadPoolExecutor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy());

        return threadPoolExecutor;
    }*/
    public static ExecutorService getThreadPoolExecutor(int size, int maxSize) {
        // 根据实际需求进行调整
        int keepAliveTime = 60; // 线程的最大空闲时间(单位:秒)
        int queueCapacity = 100; // 阻塞队列的容量
        ThreadFactory threadFactory = Executors.defaultThreadFactory(); // 默认线程工厂
        RejectedExecutionHandler rejectedExecutionHandler = new ThreadPoolExecutor.DiscardOldestPolicy(); // 拒绝策略

        // 创建线程池
        ThreadPoolExecutor threadPoolExecutor = new ThreadPoolExecutor(
                size, maxSize, keepAliveTime, TimeUnit.SECONDS,
                new ArrayBlockingQueue<>(queueCapacity), threadFactory, rejectedExecutionHandler);

        // 设置核心线程数和最大线程数相等,避免线程数量动态调整
        threadPoolExecutor.setCorePoolSize(size);

        return threadPoolExecutor;
    }
}

使用线程池

代码语言:java
复制
 @Test
    public void threadTest() throws ExecutionException, InterruptedException {
        ExecutorService threadPoolExecutor = ThreadPoolUtil.getThreadPoolExecutor(5, 10);
        long start = System.currentTimeMillis();
        HashMap<String, Object> hashMap = new HashMap<>();

        CompletableFuture<Void> emailInfo=CompletableFuture.runAsync(() -> {
            PageHelper.startPage(1,1000);
            List<EmailInfo> list = iEmailInfoService.list();
            hashMap.put("emailInfo",list);

        },threadPoolExecutor);
        CompletableFuture<Void> Attachment=CompletableFuture.runAsync(() -> {
            PageHelper.startPage(1,1000);
            List<Attachment> list2 = iAttachmentService.list();
            hashMap.put("Attachment",list2);
        },threadPoolExecutor);
       //等待线程执行完毕 获取结果
        CompletableFuture.allOf(emailInfo,Attachment).get();
        long end = System.currentTimeMillis();
        System.out.println(hashMap);
        System.out.println(end-start);//861
    }

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 创建一个线程池的使用工具类
  • 使用线程池
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档