java 线程池技术_Java线程池技术以及实现
public class DefaultThreadPool implements ThreadPool{//線程池最大限制數
private static final int MAX_WORKER_NUMBERS = 10;//線程池默認的數量
private static final int DEFAULT_WORKER_NUMBERS= 5;//線程池最小數量
private static final int MIN_WORKER_NUMBERS = 1;//這是一個任務列表,將會向里面插入任務
private final LinkedList jobs = new LinkedList() ;//工作者列表
private final List workers = Collections.synchronizedList(new ArrayList()) ;//工作者線程的數量
private int workerNum =DEFAULT_WORKER_NUMBERS ;//線程編號生成
private AtomicLong threadNum = newAtomicLong() ;publicDefaultThreadPool(){
initializeWorkers(DEFAULT_WORKER_NUMBERS);
}public DefaultThreadPool(intinitSize){
workerNum= initSize > MAX_WORKER_NUMBERS ?MAX_WORKER_NUMBERS :
initSize< MIN_WORKER_NUMBERS ?MIN_WORKER_NUMBERS : initSize ;
initializeWorkers(workerNum);
}private void initializeWorkers(intnum){for(int i = 0 ; i < num ; i++){
Worker worker= newWorker() ;
workers.add(worker) ;
Thread t= new Thread(worker, "ThreadPool-worker-"+threadNum.incrementAndGet()) ;
t.start();
}
}
@Overridepublic voidexecute(Task task) {if(task!=null){synchronized(jobs){
jobs.addLast(task);//通知
jobs.notify();
}
}
}
@Overridepublic voidshutdown() {for(Worker worker : workers){
worker.shutdown();
}
}
@Overridepublic void addWorker(intnum) {//這里是否應該選擇workers為監視器鎖
synchronized(workers){//判斷新增的數量是否超出線程池的內置規則
if(num+this.workerNum >MAX_WORKER_NUMBERS){
num= MAX_WORKER_NUMBERS - this.workerNum ;
}
initializeWorkers(num);this.workerNum +=num ;
}
}
@Overridepublic void removeWorker(intnum) {synchronized(workers){if(num >= this.workerNum){throw new IllegalArgumentException("beyond workNum") ;
}for(int i = 0 ; i < num ; i++){
Worker worker=workers.get(i);if(workers.remove(worker)){
worker.shutdown();
}
}this.workerNum -=num ;
}
}
@Overridepublic intgetTaskSize() {returnjobs.size();
}class Worker implementsRunnable{private volatile booleanrunning ;
@Overridepublic voidrun() {while(running){
Task job= null;synchronized(jobs){//如果任務列表是空的,那么就wait
if(jobs.isEmpty()){try{
jobs.wait();
}catch(InterruptedException e) {//感知到外部對WorderThread的中斷操作。返回
Thread.currentThread().interrupt();return;
}
}
job=jobs.removeFirst() ;
}if(job!=null){try{
job.run();
}catch(Exception e) {//忽略job執行中的exception
}
}
}//while end
}//run end
public voidshutdown(){
running= false;
}
}
}
總結
以上是生活随笔為你收集整理的java 线程池技术_Java线程池技术以及实现的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: mysql组件化_MySql笔记
- 下一篇: ac算法 有什么用 Java_AC算法使