我正在创建自己的线程池和未来对象,可以并行执行可调用接口。Executor提供了shutdown方法来停止所有工作线程的运行。如果我像下面这样创建一个线程池,我应该如何实现shutdown方法以在所有线程执行完毕后停止?
我的自定义线程池看起来像this。
我的自定义线程池看起来像this。
class MyThreadPool implements java.util.concurrent.Executor
{
private final java.util.concurrent.BlockingQueue<Callable> queue;
public MyThreadPool(int numThreads) {
queue = new java.util.concurrent.LinkedBlockingQueue<>();
for (int i=0 ; i<numThreads ; i++) {
new Thread(new Runnable(){
@Override
public void run() {
while(true) {
queue.take().call();
}
}
}).start();
}
}
@Override
public <T> Future<T> submit(Callable<T> callable) {
FutureTask<T> future = new FutureTask(callable);
queue.put(future);
return future;
}
public void shutdown(){ }
}
我想不到一种方法来保持线程列表,然后检查它们是否空闲?