浅谈Java中四大核心线程池

目录

  1. newCachedThreadPool
  2. newFixedThreadPool
  3. newScheduledThreadPool
  4. newSignleThreadPool

一、newCachedThreadPool

        /**
         * 构造函数:初始化线程池大小为0, 最大线程池大小为Integer.MAX_VALUE,线程闲置回收时间为60秒。
         * 执行策略:当接收任务时,如线程池中有闲置线程直接执行任务;如线程池中无闲置线程可用,则创建线程执行任务;
         * 如闲置线程闲置时间超过60秒,则进行销毁
         * 实例代码如下
         */
        ExecutorService newCacheThreadPool = Executors.newCachedThreadPool();
        for (int i = 0; i < 10; i++) {
            final int num = i;
            newCacheThreadPool.execute(new Runnable() {
                @Override
                public void run() {
                    System.out.println("第" + num + "个线程" + "-" + Thread.currentThread().getName());
                }
            });
        }

二、newFixedThreadPool

        /**
         * 构造函数:指定线程池的最大值
         * 执行策略:当提交任务时, 如果线程池中有闲置线程, 则直接执行任务; 如果线程池中无线程, 则创建线程执行任务;
         * 如果线程池中无闲置线程, 且线程池数量达到最大值, 则将任务放入待执行任务队列。
         * 实例代码如下
         */
        ExecutorService newFixedThreadPool = Executors.newFixedThreadPool(2);
        for (int i = 0; i < 10; i++) {
            final int num = i;
            newFixedThreadPool.execute(new Runnable() {
                @Override
                public void run() {
                    System.out.println("第" + num + "个线程" + "-" + Thread.currentThread().getName());
                }
            });
        }

三、newScheduledThreadPool

        /**
         * 构造函数: 指定核心线程数量
         * 执行策略:当提交任务时, 如果线程池中有闲置线程, 则直接执行任务; 如果线程池中无线程, 则创建线程执行任务;
         * 如果线程池中无闲置线程, 且线程池数量达到最大值, 则将任务放入队列。
         * 延时执行实例代码如下
         */
        ScheduledExecutorService newScheduledThreadPool = Executors.newScheduledThreadPool(2);
        for (int i = 0; i < 10; i++) {
            final int num = i;
            newScheduledThreadPool.schedule(new Runnable() {
                @Override
                public void run() {
                    System.out.println("第" + num + "个线程" + "-" + Thread.currentThread().getName());
                }
            }, 1000, TimeUnit.MILLISECONDS);
        }


        /**
         * 构造函数: 指定核心线程数量
         * 执行策略:当提交任务时, 如果线程池中有闲置线程, 则直接执行任务; 如果线程池中无线程, 则创建线程执行任务;
         * 如果线程池中无闲置线程, 且线程池数量达到最大值, 则将任务放入队列。
         * 延时定时执行实例代码如下
         */
        ScheduledExecutorService newScheduledThreadPool = Executors.newScheduledThreadPool(2);
        for (int i = 0; i < 10; i++) {
            final int num = i;
            newScheduledThreadPool.scheduleAtFixedRate(new Runnable() {
                @Override
                public void run() {
                    System.out.println("第" + num + "个线程" + "-" + Thread.currentThread().getName());
                }
            }, 1000, 1000, TimeUnit.MILLISECONDS);
        }

四、newSingleThreadPool

        /**
         * 构造函数: 创建唯一的单线程
         * 执行策略: 当提交任务时, 如果线程闲置, 则直接执行任务; 如果闲置不闲置, 则将任务放入待执行队列
         * 实例代码如下
         */
        ExecutorService newSingleThreadPool = Executors.newSingleThreadExecutor();
        for (int i = 0; i < 10; i++) {
            final int num = i;
            newSingleThreadPool.execute(new Runnable() {
                @Override
                public void run() {
                    System.out.println("第" + num + "个线程" + "-" + Thread.currentThread().getName());
                }
            });
        }

针对线程池的详细使用,还请具体查看源码

发布了12 篇原创文章 · 获赞 0 · 访问量 3989

猜你喜欢

转载自blog.csdn.net/Peppa_Pig_0325/article/details/105048192