ExecutorService.shutdown() 没有关闭所有线程

qq_23371523 2015-09-08 02:44:27
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 没有正常关闭 怎么才能正常关闭
...全文
437 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
龙四 2015-09-08
  • 打赏
  • 举报
回复
看shutdown与shutdownNow的API文档
qq_23371523 2015-09-08
  • 打赏
  • 举报
回复

62,616

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧