我正在创建一个线程池,因为我不需要从我的线程输出任何信息,所以我没有使用期货&Callables。但问题是,如果我不使用Futures,我看到threadpool正在丢失我提交的任务。奇怪的Java线程池行为 - 失去任务,除非使用期货
这里是一个被失去任务 -
while(hasWorkToDo){
ThreadPoolExecutor.execute(new Worker());
System.out.println("Work submitted");
}
内,工人的()我的代码结构,我在打印的run()执行的第一行“有工作”。
当我运行上面的代码时,“获得工作”的数量总是少于“工作提交”。
但是,当我改变我的代码结构如下─
ArrayList<Future<String>> list = new ArrayList<Future<String>>();
while(hasWorkToDo){
Future<String> submit=ThreadPoolExecutor.submit(new Worker());
list.add(submit)
}
for (Future<String> f : list) {
f.get();
}
然后我看到很多次“有工作”等于“工作提交了”
这使我相信,除非我使用期货&可调参数,线程池正在使用我正在提交的任务。
你以前见过这种行为吗?有没有更好的方法来调试呢?
我已经关机()在错误的地方 – user837208 2012-04-11 08:01:50