您的位置:首页 > 其它

线程池单例类

2016-06-13 20:00 190 查看
package com.study.googleplay.manager;

import java.util.concurrent.Executors;
import java.util.concurrent.LinkedBlockingDeque;
import java.util.concurrent.ThreadPoolExecutor;
import java.util.concurrent.ThreadPoolExecutor.AbortPolicy;
import java.util.concurrent.TimeUnit;

public class ThreadManager {

/**
* 线程池
*
* @author TCL
* @date 2016-6-13
*/
private static ThreadPool threadPoolpool;

public static ThreadPool getInstance() {
if (threadPoolpool == null) {
synchronized (ThreadManager.class) {
if (threadPoolpool == null) {
int threadCount = Runtime.getRuntime()
.availableProcessors() * 2 + 1;// 线程个数
threadPoolpool = new ThreadPool(threadCount, threadCount,
1L);
}
}
}
return threadPoolpool;
}

public static class ThreadPool {
private int corePoolSize;// 核心线程数
private int maximumPoolSize;// 最大线程数
private long keepAliveTime;// 休息时间
private ThreadPoolExecutor executor;

private ThreadPool(int corePoolSize, int maximumPoolSize,
long keepAliveTime) {
this.corePoolSize = corePoolSize;
this.maximumPoolSize = maximumPoolSize;
this.keepAliveTime = keepAliveTime;

}

public void execute(Runnable r) {
// 参数1:核心线程数,参数2:最大线程数,参数3:休息时间,参数4:时间单位,
// 参数5:线程队列参数6:生产线程的工厂,参数7:线程异常策略
if (executor == null) {
executor = new ThreadPoolExecutor(corePoolSize,
maximumPoolSize, keepAliveTime, TimeUnit.SECONDS,
new LinkedBlockingDeque<Runnable>(),
Executors.defaultThreadFactory(), new AbortPolicy());
}
executor.execute(r);// 执行一个Runnable对象,具体执行时机由线程池说了算
}

// 取消任务
public void cancel(Runnable r) {
if (r != null) {
// 如果任务还没开始,正在等待,可以通过 此方法移除,
// 如果任务已经开始,需要在run方法中进行中断
executor.getQueue().remove(r);// 从线程池中移除对象
}
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: