平台中使用ExecutorService,CompletionService中的线程停止的问题
今天再使用java.util.concurrent报时,使用ExecutorService executor = Executors.newFixedThreadPool(threadCount);
CompletionService<Object> completionService = new ExecutorCompletionService<Object>(executor);
建立线程池,并通过下面代码提交任务
for (int i = 0; i < threadCount; i++) {
CalculateSalary call = new CalculateSalary(this);
Future<Object> future = executor.submit(call);
}
通过
for (int i = 0; i < threadCount; i++) {
Object result = completionService.take().get();
if(logger.isInfoEnabled()){
logger.info("Threads run results:::"+result.toString());
}
}
获取执行结果,但是,其中一个线程退出的话,其他正在运行的进行也不在运行。为什么?
运行中使用的ReadWriteLock进行信息共享,不存在锁不释放的情况。
后来尝试
ExecutorService executor = Executors.newFixedThreadPool(threadCount);
List<Future<Object>> results = new ArrayList<Future<Object>>();
for (int i = 0; i < threadCount; i++) {
CalculateSalary call = new CalculateSalary(this);
Future<Object> future = executor.submit(call);
results.add(future);
}
for (Future<Object> fs:results) {
//fs.get()会等待线程返回出结果再执行
Object count=fs.get();
System.out.println(count);
}
和
ExecutorService executor = Executors.newFixedThreadPool(threadCount);
CompletionService<Object> completionService = new ExecutorCompletionService<Object>(executor);
for (int i = 0; i < threadCount; i++) {
CalculateSalary call = new CalculateSalary(this);
Future<Object> future = completionService.submit(call);
}
for (int i = 0; i < threadCount; i++) {
Object result = completionService.take().get();
if(logger.isInfoEnabled()){
logger.info("Threads run results:::"+result.toString());
}
}
这两种方法,就没问题。什么导致这个问题的出现,望解答 --------------------编程问答-------------------- 池中总共有多少线程?
按理说ExecutorCompletionService只是简单的封装了下线程池,并不会导致LZ说所的问题。
“但是,其中一个线程退出的话,其他正在运行的进行也不在运行”是怎么检测的?
调用线程池的getActiveCount,返回值是多少?
jdk的版本用的是多少?会不会是http://www.ticmy.com/?p=239中描述的第一个问题 --------------------编程问答-------------------- 使用Executors.newFixedThreadPool共开5个线程,在call()的方法中有log记录,如果一个线程退出,其他的线程及时在没有运行完成,log也不在记录。
jdk版本是1.6 --------------------编程问答-------------------- call里的方法有没有可能被阻塞,导致走不下去?
最好能贴出call一些代码来瞅瞅
补充:Java , Web 开发