为什么用池化技术

我们工作中会用各种池,线程池,数据库连接池,http连接池,

那为什么用池化技术呢?

答案很明显,肯定是有好处呗,具体有什么好处,

我们举个例子验证一下,大家看看执行结果说话,有代码,有图,才有真相

public class ThreadTest {
    public static void main(String[] args) throws InterruptedException {
        for (int i = 1; i < 6; i++) {
            excute();
            System.out.println("---------------第" + i + "次执行结束---------------");
        }

    }

    private static void excute() throws InterruptedException {

        Long noPoolStartTime = System.currentTimeMillis();
        final List<Integer> list = new ArrayList<>();
        final Random random = new Random();
        for (int i = 0; i < 10000; i++) {
            Thread thread = new Thread() {
                @Override
                public void run() {
                    list.add(random.nextInt());

                }
            };
            thread.start();
            thread.join();
        }
        System.out.println("list长度为:" + list.size());
        System.out.println("不使用线程池运行时间为:" + (System.currentTimeMillis() - noPoolStartTime));


        Long threadPoolStartTime = System.currentTimeMillis();
        final List<Integer> poolList = new ArrayList<>();
//        ExecutorService executorService = Executors.newSingleThreadExecutor();//开发手册不建议这样写,因为LinkedBlockingQueue为无界队列
        ExecutorService executorService = new ThreadPoolExecutor(1,
                1,
                0,
                TimeUnit.MILLISECONDS, /*new SynchronousQueue()*/
                new ArrayBlockingQueue<>(10000));
        for (int i = 0; i < 10000; i++) {
            executorService.submit(new Runnable() {
                @Override
                public void run() {
                    poolList.add(random.nextInt());
                }
            });
        }
        executorService.shutdown();
        executorService.awaitTermination(1, TimeUnit.DAYS);

        System.out.println("poolList长度为:" + poolList.size());
        System.out.println("使用线程池后运行时间为:" + (System.currentTimeMillis() - threadPoolStartTime));
    }
}

执行结果如下:
list长度为:10000
不使用线程池运行时间为:2200
poolList长度为:10000
使用线程池后运行时间为:41
---------------第1次执行结束---------------
list长度为:10000
不使用线程池运行时间为:1197
poolList长度为:10000
使用线程池后运行时间为:16
---------------第2次执行结束---------------
list长度为:10000
不使用线程池运行时间为:969
poolList长度为:10000
使用线程池后运行时间为:7
---------------第3次执行结束---------------
list长度为:10000
不使用线程池运行时间为:1023
poolList长度为:10000
使用线程池后运行时间为:5
---------------第4次执行结束---------------
list长度为:10000
不使用线程池运行时间为:954
poolList长度为:10000
使用线程池后运行时间为:4
---------------第5次执行结束---------------

 

由此可见线程池确实能提高效率,有这么好的技术何乐而不用呢?

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值