多任务共用一个大的线程池还是每个任务单独使用线程池?

本文探讨了大线程池与多线程池在处理IO密集型和计算密集型任务时的效率,并指出每种任务类型使用独立线程池的优缺点,包括任务独立性、资源分配、错误排查等方面。建议根据任务特性及实际需求来选择合适的线程池策略。
摘要由CSDN通过智能技术生成

1. 大线程池与多线程池

开发过程中的任务大致分为两大类:

  • IO密集型任务,此类任务特点就是需要经常暂停任务进行其他的IO操作,如文件读写、网络数据请求等。
  • 计算密集型任务,此类任务的特点就是大多数操作都是在内存中进行。

下面通过模拟这两种情况来看一下结果,首先看一下在大线程池和多线程池执行IO密集型任务所消耗的时间:

package org.example.objectsize;

import java.io.File;
import java.io.IOException;
import java.nio.charset.StandardCharsets;
import java.util.concurrent.CountDownLatch;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.atomic.AtomicInteger;
import org.apache.commons.io.FileUtils;

public class IOTest {

    public static void main(String[] args) throws Exception{
        extracted();
        main1(args);
    }

    private static void extracted() throws InterruptedException {
        final AtomicInteger integer = new AtomicInteger();
        final  File file = new File("C:\\Users\\mxsm\\Desktop\\RocketMQ5\\aaa.txt");
        ExecutorService executorService = Executors.newFixedThreadPool(50);
        CountDownLatch latch =  new CountDownLatch(50);
        long l = System.currentTimeMillis();
        for(int i = 0; i < 50; ++i){
            executorService.execute(new Runnable() {
                @Override
                public void run() {
                    do{
                        try {
                            FileUtils.write(file, integer.get()+"", StandardCharsets.UTF_8);
                        } catch (IOException e) {
                            e.printStackTrace();
                        }
                    }while (integer.getAndIncrement() < 100000);
                    latch.countDown();
                }
            });
        }
        latch.await();
        System.out.println("大线程池:"+(System.currentTimeMillis()-l));
        executorService.shutdown();
    }
    public static void main1(String[] args) throws Exception{
        final AtomicInteger integer = new AtomicInteger();
        final  File file = new File("C:\\Users\\mxsm\\Desktop\\RocketMQ5\\aaa.txt"
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值