81,094
社区成员
发帖
与我相关
我的任务
分享
//不限制大小的一个缓冲的池,如果线程足够多会内存不足的
ExecutorService cachedPoolService = Executors.newCachedThreadPool();
//固定大小的池,下例为10
ExecutorService fixPoolService = Executors.newFixedThreadPool(10);
import java.io.*;
import java.util.concurrent.*;
import java.util.*;
class MyThreadPoolExecutor extends ThreadPoolExecutor{
private boolean hasFinish = false;
public MyThreadPoolExecutor(int corePoolSize, int maximumPoolSize, long keepAliveTime, TimeUnit unit, BlockingQueue<Runnable> workQueue, RejectedExecutionHandler handler)
{
super(corePoolSize, maximumPoolSize, keepAliveTime, unit, workQueue, handler);
// TODO Auto-generated constructor stub
}
public MyThreadPoolExecutor(int corePoolSize, int maximumPoolSize, long keepAliveTime, TimeUnit unit, BlockingQueue<Runnable> workQueue, ThreadFactory threadFactory, RejectedExecutionHandler handler)
{
super(corePoolSize, maximumPoolSize, keepAliveTime, unit, workQueue,
threadFactory, handler);
// TODO Auto-generated constructor stub
}
public MyThreadPoolExecutor(int corePoolSize, int maximumPoolSize, long keepAliveTime, TimeUnit unit, BlockingQueue<Runnable> workQueue, ThreadFactory threadFactory) {
super(corePoolSize, maximumPoolSize, keepAliveTime, unit, workQueue,
threadFactory);
// TODO Auto-generated constructor stub
}
public MyThreadPoolExecutor(int corePoolSize, int maximumPoolSize, long keepAliveTime, TimeUnit unit, BlockingQueue<Runnable> workQueue) {
super(corePoolSize, maximumPoolSize, keepAliveTime, unit, workQueue);
// TODO Auto-generated constructor stub
}
/* (non-Javadoc)
* @see java.util.concurrent.ThreadPoolExecutor#afterExecute(java.lang.Runnable, java.lang.Throwable)
*/
@Override
protected void afterExecute(Runnable r, Throwable t) {
// TODO Auto-generated method stub
super.afterExecute(r, t);
synchronized(this){
System.out.println("自动调用了....afterEx 此时getActiveCount()值:"+this.getActiveCount());
if(this.getActiveCount() == 1)//已执行完任务之后的最后一个线程
{
this.hasFinish=true;
this.notify();
}//if
}// synchronized
}
public void isEndTask() {
synchronized(this){
while (this.hasFinish==false) {
System.out.println("等待线程池所有任务结束: wait...");
try {
this.wait();
}
catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
}