首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在并发java编程中指定线程执行?

如何在并发java编程中指定线程执行?
EN

Stack Overflow用户
提问于 2012-07-03 00:26:07
回答 3查看 196关注 0票数 0

我使用Callable、Executor和Future对象从不同的线程并行调用and服务。在执行完所有的webservice调用之后,我在jsp中显示结果。

这里我有一个疑问:如果其中一个jsp服务调用失败,我如何在jsp中显示成功调用的结果?

如果一个线程在这种情况下需要更多的时间来执行,我想跳过该响应,并在jsp中显示其余的结果。

我试图在一个webserice中添加一个Thread.sleep(1000),但是在jsp中响应也被延迟了。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-07-03 00:49:14

如果您使用的是executor服务,则可以在提交完所有可调用后使用超时终止它:

代码语言:javascript
复制
executor.shutdown();
boolean terminated = executor.awaitTermination(1, TimeUnit.SECONDS);

如果您已经存储了提交作业时由executor返回的期货,则可以遍历列表并检查哪个任务尚未完成:

代码语言:javascript
复制
if (!terminated) {
    for (Future f : futureList) {
        if (!f.isDone()) { System.out.println("This task " + f + " did not complete"); }
    }
}
票数 0
EN

Stack Overflow用户

发布于 2012-07-03 00:36:54

您可能希望在启动所有其他线程的主线程中考虑CountdownLatch

这个想法是,在你产生所有线程之后,你开始在给定的超时时间内等待锁存器。每个线程在完成时都必须调用锁存器上的countDown()方法。因此,当所有线程完成或超时时,主线程将继续运行。

票数 2
EN

Stack Overflow用户

发布于 2012-07-03 02:17:19

有人发布了这篇文章并删除了他的答案,但我认为这可能会有所帮助。

您可以使用ExecutorCompletionService

当您准备好在ExecutorService上呈现poll时,您可以简单地提交到ExecutorService。它将为您提供最近完成的未来,或者坐在那里等待,直到其中一个准备就绪。

代码语言:javascript
复制
ExecutorCompletionService e = new ExecutorCompletionService(...);

for(int i =0; i < n ; i++)
    e.submit(..);

当你准备好的时候

代码语言:javascript
复制
for(int i =0 ; i < n; i++){
   T t = e.poll(); //or with a timeout: T t = e.poll(100, TimeUnit.MILLISECONDS); 
   //do rendering
}

应该考虑到你的用例。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11297558

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档