CachedThreadPool可变尺寸的线程池

package com.jiading.pool;

import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

/**
 * CachedThreadPool,可变尺寸的线程池,也叫缓存线程池
 * 因为是可变尺寸的,所以不支持初始化的时候指定大小,会报错
 * 缓存线程池工作线程的创建数量几乎没有限制(其实也有限制的,数目为Interger. MAX_VALUE), 这样可灵活的往线程池中添加线程。
 * 在使用CachedThreadPool时,一定要注意控制任务的数量,否则,由于大量线程同时运行,很有会造成系统瘫痪。
 * 缓存线程池中corePoolSize为0,maximumPoolSize则是int最大值
 * 缓存线程池使用的阻塞队列是SynchronousQueue,它比较特殊,没有所谓的最大大小
 */
public class CachedThreadTest {
    public static void main(String[] args) {
        ExecutorService cachedThreadPool = Executors.newCachedThreadPool();
        for(int i = 0;i < 10;i++) {
            final int index = i;//给变量加个final挺好,省的它变
            /**
             * 可变线程数,要几个给几个
             */
            cachedThreadPool.execute(new Runnable() {
                @Override
                public void run() {
                    Thread.currentThread().setName("Thread i = " + index);
                    System.out.println(Thread.currentThread().getName() + " index = " + index);
                    try {
                        Thread.sleep(500);
                        System.out.println("sleep finished");
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                }
            });
        }
        cachedThreadPool.shutdown();
        System.out.println("on the main thread...");
    }
}


输出为:

on the main thread...
Thread i = 8 index = 8
Thread i = 2 index = 2
Thread i = 6 index = 6
Thread i = 7 index = 7
Thread i = 3 index = 3
Thread i = 9 index = 9
Thread i = 1 index = 1
Thread i = 4 index = 4
Thread i = 5 index = 5
Thread i = 0 index = 0
sleep finished
sleep finished
sleep finished
sleep finished
sleep finished
sleep finished
sleep finished
sleep finished
sleep finished
sleep finished
posted @ 2020-03-18 16:52  别再闹了  阅读(420)  评论(0)    收藏  举报