ExecutorService.shutdownNow() 能够关闭所有线程 但是会报InterruptedException
程序大概这样
BlockingQueue<FutureTask> queue = new SynchronousQueue<FutureTask>(true)
ExecutorService.execute(A);
queue ExecutorService传入 线程A 内容为 不停的放入 FutureTask ft 分页查询 FutureTask<List> ft2 啥事不干
public void run() {
while(iswork){
Task task = new Task(sql, params, fromSize, pageSize);
FutureTask<List> ft = new FutureTask<List>(task);
FutureTask<List> ft2 = new FutureTask<List>( new TaskBlank());
service.submit(ft);
service.submit(ft2);
fromSize += pageSize;
try {
queue.put(ft);
queue.put(ft2);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
当 ExecutorService.shutdown() 执行:
FutureTask ft 分页查询正常关闭 由于 A 线程 正在 waiting , 没有唤醒 没有关闭
在关闭条件: queue.take() 只会在取完 ft 关闭 ft2还在queue中
A.stop(){iswork=false}; //由于 SynchronousQueue 只能放一个 线程A执行到 queue.put(ft2); waiting 这段stop无效果
queue.clear();
ExecutorService.shutdown();
executor.shutdown();
结果 A 线程 一直在waiting 没有正常关闭 怎么才能正常关闭
------解决思路----------------------
看shutdown与shutdownNow的API文档