- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有这个代码:
public <T> T executeCodeBlockWithTimeLimit(String criticalBlockTimeOutMilli, Callable<T> callable) throws
Exception {
ExecutorService service = Executors.newSingleThreadExecutor();
Future<T> future = service.submit(callable);
startStopWatch();
T result;
if (criticalBlockTimeOutMilli != null) {
result = future.get(Long.parseLong(criticalBlockTimeOutMilli), TimeUnit.MILLISECONDS);
} else {
result = callable.call();
}
long timeElapsed = stopStopWatch();
e2eResult.runTime = timeElapsed;
service.shutdown();
return result;
}
在外部方法中:
Callable<Void> callable = new
Callable<Void>() {
@Override
public Void call() throws
Exception {
System.out.println("22222");
return null;
}
};
timerUtils.executeCodeBlockWithTimeLimit(criticalBlockTimeOutMilli, callable);
我看到了控制台打印
22222
22222
为什么要调用两次?
最佳答案
当您从 Executor 获得 Future 时 submit
方法 这个调用 Callable 对象方法并存储结果。在您的代码中,您首先获得 Future 然后如果变量 criticalBlockTimeOutMilli
是<b>null</b>
你调用call()
Callable 对象上的方法。这意味着执行两次 Callable 对象。
您应该使用 get()
方法,因为这个方法使用已经从您的 Future 对象收集的结果(参见 Future#get() method )。
关于java - 为什么我的 threadExecutor 调用同一个回调两次?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27676700/
我有一个多线程服务器应用程序。其中一个 Runnables 使用无限循环来不断检查连接。这是使用 socket = serverSocket.accept() 完成的,这是一个阻塞调用。 当我关闭服务
如何在固定 threadExecutor 中访问 getOptimizedMol() 方法?我需要在每个优化器线程完成时获取返回分子? import chemaxon.marvin.calculati
我有这个代码: public T executeCodeBlockWithTimeLimit(String criticalBlockTimeOutMilli, Callable callable)
我正在尝试根据字符串长度按升序运行任务。但是它没有按预期工作。这是我迄今为止尝试过的代码: import java.util.Comparator; import java.util.concurre
这是场景: 我有一个 java 主进程,它使用 JMS 发布到某些 ActiveMQ 代理。 每次要向代理发送消息时,都会使用固定大小的线程池(使用 ThreadExecutor)中的一个线程,并在其
我是一名优秀的程序员,十分优秀!