- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在开发一个项目,该项目有一个向其提交任务的线程池。可以说,每个任务都是一条链。当任务执行时,它会执行需要执行的操作,然后检查结果。这些任务中的每一个都包含结果映射(这只是一个枚举)和其他任务。这些在同一个线程中调用,并且循环重复,直到没有更多任务为止,此时它返回链,将每个结果添加到集合中并将其返回到主线程。问答示例:
public abstract class MyCallable implements Callable<MyResponse> {
private Map<ResponseEnum, List<MyCallable>> callbacks;
public List<MyResponse> call() {
List<MyResponse> resp = new ArrayList<MyResponse>();
try{
//Run the process method and collect the result
MyResponse response = process();
List<MyCallable> next = callbacks.get(response.getResult());
if (next != null && !next.isEmpty()){
//Run within same thread, return results
for (MyCallable m : next){
resp.addAll(m.call();
}
return resp;
} else {
//No more responses, pass them back up the chain
resp.add(response);
return list;
}
//Anything goes wrong, we catch it here and wrap it in a response
} catch (Exception e){
resp.add(new MyExceptionResponse(e));
return resp;
}
}
//Implemented by all child classes, does the actual work
public abstract MyResponse process() throws Exception;
请记住,这也是我尚未真正测试过的原型(prototype),因此我知道这可能并不完美或不一定完全可行。
我担心的是:一个任务被添加到线程池并开始执行。在主线程中,创建一个 Future 并在其上调用 .get(N, TimeUnit) 来检索结果。如果该任务超时怎么办?我们得到一个 TimeoutException。现在,在 try/catch block 中,我可以取消 Future,但是有什么方法可以取消 Future 并提取结果,至少就其结果而言?在第四个任务停止之前,三个任务可能已经执行并返回结果。 MyCallable 中的 try/catch 应该返回一个结果,并在出现异常时将其推回链上(即,调用 .cancel(true) 时出现 InterruptedException),但是我有可能获得该结果吗?
当然,如果我一开始就完全错误地理解了这一点,那也很高兴知道。这是我第一次涉足多线程。
编辑:好的,考虑到这一点,已经在 MyCallable 类周围放置了一个包装器。包装器实现 Callable 并返回集合。该集合沿着 MyCallable 对象链向下传递,并添加结果,因此如果 Future.get 超时,我们可以检索该集合并获取部分结果。
但是,这会带来潜在的竞争条件。如果当前调用的 MyCallable 正在等待外部服务,则 Future.cancel(true) 操作将在 MyCallable 内引发 InterruptedException。捕获此异常并将异常包装在响应对象中并添加到集合中。问题是,如果主线程取消 Future,在包装器或包装器中的集合上同步,然后获取集合,这会在获取集合和 MyCallable 中的 try/catch block 之间创建竞争条件,添加集合的包装异常?或者主线程会等待捕获异常然后执行下一行?
最佳答案
当您收到 TimeoutException
时,提交给 Executor Service 的任务正在愉快地进行:只有您等待收到了异常(exception)。这大概意味着结果 map 仍在填充中。
您可以做的是使用并发映射并安全地提取超时发生后出现的任何结果。
关于Java Future<T>、TimeoutException 和获取部分结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18216767/
我是 python 和 selenium 的新手,我正在尝试我在 youtube 上看到的一个例子。这是代码示例: from selenium import webdriver from seleni
我已经使用 kafkatemplate bean 制作了发送器类来将有效负载发送到主题在 SenderConfiguration 类中进行一些配置。 发件人类 @Component public cl
这是我的第一类 UserPage。在这里您可以看到从 BasePageObject 类调用 click 方法的方法 ClickNextPage() public class UserPage exte
这个问题在这里已经有了答案: catch exception that is thrown in different thread (5 个答案) 关闭 3 年前。 如何捕获TimeoutExcep
我正在尝试使用 Ajax 加载元素。这是我的脚本: .. WebElement account= (new WebDriverWait(driver, 15)) .until(Expected
是: Future#get (FutureTask#get) ExecutorService.html#invokeAny 仅可以抛出 java.util.concurrent.TimeoutExce
编辑:我的自定义处理程序中有一个静态初始化程序 block 。当我删除它时,它运行良好。我怀疑静态初始化程序有问题。它尝试访问一些系统属性和一些 LogManager 属性。 我正在从 Eclipse
我的问题与 WCF 不时抛出的 System.TimeoutException 有关: System.TimeoutException: The open operation did not comp
我有一个 DAO 类,它有下面的方法。我在事务管理器中称其为事务管理器。当我在没有“conn.commit()”行的情况下运行它时 - 它会抛出超时异常,但是当我用这个行运行它时 - 就可以了。有什么
这是我的 DataClientFactory 类。 public class DataClientFactory { public static IClient getInstance() {
我有两个在同一网络上运行的自托管服务。第一个是对 Excel 工作表(或其他来源,但目前这是我用来测试的来源)进行抽样,并将更新发送到订阅的客户端。第二个作为客户端连接到第一个客户端的实例,可选地评估
假设您设计了一个 System.IO.Stream 扩展 MyStream,其 Read 方法可能会超时,您希望抛出哪种异常类型: System.IO.IOException(例如 System.Ne
我是 C# 的新手,我发现异常有点令人困惑...我有一个包含以下代码的网络应用程序: try { //do something } catch (TimeoutException t) {
我正在使用分布式对象进行进程间通信。我正在运行一台服务器和四个客户端实例,但我收到 NSPortTimeoutException。我想存储客户端对象@server以供客户端之间进一步通信。 //客户端
我正在测试适用于Twitter的Spring Cloud Stream App, 使用以下与Kafka相关的环境属性启动docker容器, KAFKA_ADVERTISED_HOST_NAME= ad
我正在项目中使用 JxBrowser。我只使用本地 HTML 文件,因此使用以下方法来呈现我的 HTML 文件: public static void loadHTMLFile(Browser
我使用java telegram api与windows intellij idea中的telegram core api进行通信 https://github.com/ex3ndr/telegram
我在使用 vert.x Flamework(版本:“3.8.1”)时遇到一些问题。我在运行单元测试时遇到了 java.util.concurrent.TimeoutException 。没有什么会阻塞
根据 Javadoc,Future.get() ,抛出 TimeoutException 和 CancellationException 以及另外 2 个异常。 TimeoutException 和
我之前问过一个 question在尝试从远程计算机访问 WCF 服务时解决 SecurityNegotiationException。由于 ValtasarIII 的回答,该异常已得到解决。 现在我有
我是一名优秀的程序员,十分优秀!