您的位置:首页 > 其它

一个简单的线程池工具类——可以实现对单个线程的控制

2016-12-11 11:34 363 查看
注意:removeTask()方法起作用有一个必要的前提,就是这个任务还没有开始执行,如果已经开始执行了,就停止不了该任务了,这个方法就不会起作用

工具类:

/**
*线程池代理类
*/
public class ThreadPoolProxy {
ThreadPoolExecutor mThreadPoolExecutor;

private int corePoolSize;
private int maximumPoolSize;
private long keepAliveTime;

public ThreadPoolProxy(int corePoolSize, int maximumPoolSize, long keepAliveTime) {
this.corePoolSize = corePoolSize;
this.maximumPoolSize = maximumPoolSize;
this.keepAliveTime = keepAliveTime;
}

private ThreadPoolExecutor initExecutor() {
if(mThreadPoolExecutor == null) {
synchronized(ThreadPoolProxy.class) {
if(mThreadPoolExecutor == null) {

TimeUnit unit =  TimeUnit.MILLISECONDS;
ThreadFactory threadFactory = Executors.defaultThreadFactory();
RejectedExecutionHandler handler = new ThreadPoolExecutor.AbortPolicy();
LinkedBlockingQueue<Runnable> workQueue = new LinkedBlockingQueue<>();

mThreadPoolExecutor = new ThreadPoolExecutor(
corePoolSize,//核心线程数
maximumPoolSize,//最大线程数
keepAliveTime,//保持时间
unit,//保持时间对应的单位
workQueue,
threadFactory,//线程工厂
handler);//异常捕获器
}
}
}
return mThreadPoolExecutor;
}

/**执行任务*/
public void executeTask(Runnable r) {
initExecutor();
mThreadPoolExecutor.execute(r);
}

/**提交任务*/
public Future<?> commitTask(Runnable r) {
initExecutor();
return mThreadPoolExecutor.submit(r);
}

/**删除任务*/
public void removeTask(Runnable r) {
initExecutor();
mThreadPoolExecutor.remove(r);
}

}


使用方法:

创建线程池代理类和runnable对象

private ThreadPoolProxy threadPoolProxy = new ThreadPoolProxy(1, 1, 3000);

private Runnable runnable = new Runnable() {
@Override
public void run() {
//TODO
}
};


对runnable对象进行操作: 

threadPoolProxy.executeTask(runnable);
threadPoolProxy.removeTask(runnable);



                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: