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

浙公网安备 33010602011771号