1、线程池工作原理
2、线程池创建
public class ThreadManager {
private static ThreadPollProxy mThreadPollProxy; //单列对象
public static ThreadPollProxy getThreadPollProxy() {
// System.out.println("getThreadPollProxy=====");
synchronized (ThreadPollProxy.class) {
// System.out.println("synchronized (ThreadPollProxy.class)=====");
if (mThreadPollProxy == null) {
// System.out.println("mThreadPollProxy == null====");
mThreadPollProxy = new ThreadPollProxy(3, 6, 100);
}
}
return mThreadPollProxy;
}
/**
* 通过ThreadPoolExecutor的代理类来对线程池的管理
*/
public static class ThreadPollProxy {
private ThreadPoolExecutor poolExecutor;
private int corePoolSize;
private int maximumPoolSize;
private long keepAliveTime;
public ThreadPollProxy(int corePoolSize, int maximumPoolSize, long keepAliveTime) {
this.corePoolSize = corePoolSize;
this.maximumPoolSize = maximumPoolSize;
this.keepAliveTime = keepAliveTime;
}
public void execute(Runnable r) {
// System.out.println("public void execute(Runnable r)=====");
if (poolExecutor == null || poolExecutor.isShutdown()) {
// System.out.println("poolExecutor == null || poolExecutor.isShutdown()=====");
poolExecutor = new ThreadPoolExecutor(
//核心线程数量
corePoolSize,
//最大线程数量
maximumPoolSize,
//当线程空闲时,保持活跃的时间
keepAliveTime, //时间单元 ,
// 毫秒级
TimeUnit.MILLISECONDS,
//线程任务队列
new LinkedBlockingQueue<Runnable>(),
// new ArrayBlockingQueue(10),
//创建线程的工厂
Executors.defaultThreadFactory());
}
poolExecutor.execute(r);
}
}
}