packagecom.rbac.thread;importjava.util.ArrayList;importjava.util.List;importjava.util.concurrent.BlockingQueue;importjava.util.concurrent.LinkedBlockingDeque;importjava.util.concurrent.TimeUnit;/*** 自定义线程池
*
*@authorxl,lang
**/
public classMyExecutorService {//初始化线程
protected ListinitThreads;//执行任务列表
protected BlockingQueuetaskQueues;//线程执行状态
protected volatile boolean threadState = true;/** // 当前线程的活跃数 public AtomicInteger activeCount; public Lock lock=new
* ReentrantLock(); // 最小活跃数 public int threadMinSize = 0; // 最大线程数 public
* int threadMaxSize = 0; // 初始话线程数 public int threadInitSize = 0;*/
/*** 线程初始化方法
*
*@paramthreadMaxSize
*@paramthreadInitSize
*@paramtaskQueueSize*/
/** public MyExecutorService(int threadMaxSize, int threadMinSize, int
* threadInitSize, int taskQueueSize) { this.taskQueues = new
* LinkedBlockingDeque(taskQueueSize); if (threadInitSize > 0 &&
* threadInitSize < threadMaxSize) { this.initThreads = new ArrayList<>();
* for (int i = 0; i < threadInitSize; i++) { InitThread init = new
* InitThread(); init.start(); initThreads.add(init); }
*
* }
*
* }*/
/*** 线程初始化方法
*
*@paramthreadMaxSize
*@paramthreadInitSize
*@paramtaskQueueSize*/
public MyExecutorService(int threadInitSize, inttaskQueueSize) {this.taskQueues = new LinkedBlockingDeque(taskQueueSize);if (threadInitSize > 0) {this.initThreads = new ArrayList<>();for (int i = 0; i < threadInitSize; i++) {
InitThread init= newInitThread();
init.start();
initThreads.add(init);
}
}
}//添加任务
public boolean exeute(Runnable task) throwsInterruptedException {return this.taskQueues.offer(task, 60, TimeUnit.SECONDS);
}/*** 初始化线程
*
*@authorxl,lang
**/
class InitThread extendsThread {
@Overridepublic voidrun() {while (threadState || taskQueues.size() > 0) {
Runnable runable=taskQueues.poll();if (null !=runable) {
runable.run();
}
}
}
}//关闭线程池
public voidshutdown() {this.threadState = false;
}public static voidmain(String[] args) {
MyExecutorService es= new MyExecutorService(2, 5);for (int i = 0; i < 100; i++) {final int a =i;try{
es.exeute(newRunnable() {
@Overridepublic voidrun() {
System.out.println(Thread.currentThread().getName()+ "执行" +a);
}
});
}catch(InterruptedException e) {//TODO Auto-generated catch block
e.printStackTrace();
}
}
es.shutdown();
}
}