我尝试运行一个异步进程。基于以下示例:http : //tomee.apache.org/examples-trunk/async-
methods/README.html
但是,addWorkflow(Workflow workflow)
只有在run(Workflow workflow)
完全完成其中的代码后,该方法才会返回。
然后当它返回并被result.get();
调用时,我将得到异常:
原因:java.lang.IllegalStateException:对象不代表实际的Future
有什么建议我想念的吗?
@Singleton
public class WorkflowProcessor {
@EJB
private WorkflowManager workflowManager;
private final static Logger log = Logger.getLogger(WorkflowProcessor.class.getName());
public void runWorkflows(Collection<Workflow> workflows) throws Exception{
final long start = System.nanoTime();
final long numberOfWorkflows = workflows.size();
Collection<Future<Workflow>> asyncWorkflows = new ArrayList<>();
for(Workflow workflow : workflows){
Future<Workflow> w = addWorkflow(workflow);
asyncWorkflows.add(w);
}
log.log(Level.INFO, "workflow jobs added {0}", new Object[]{numberOfWorkflows});
for(Future<Workflow> result : asyncWorkflows){
result.get();
}
final long total = TimeUnit.NANOSECONDS.toSeconds(System.nanoTime() - start);
log.log(Level.INFO, "WorkflowProcessor->runWorkflows {0} workflows completed in:{1}", new Object[]{numberOfWorkflows, total});
}
@Asynchronous
@Lock(LockType.READ)
@AccessTimeout(-1)
private Future<Workflow> addWorkflow(Workflow workflow){
run(workflow);
return new AsyncResult<Workflow>(workflow);
}
private void run(Workflow workflow){
this.workflowManager.runWorkflow(workflow);
}
问题是Java无法装饰隐式this指针。
换句话说,将不会处理@Asynchronous批注,而您正在执行普通的方法调用。
您可以为自己的单例添加对自身的引用(称为“ self”),然后调用self.addWorkflow。
您可能还需要考虑在无状态Bean中运行异步代码。您正在为addWorkflow使用读锁,但是runWorkflow仍然具有写锁。我认为您现在有一个死锁:您要持有该锁,直到工作完成为止,但是直到释放写锁后才能进行任何工作。
Ember.js路由器能够使用异步路由处理应用程序中的复杂异步逻辑。 下面给出的表显示了路由器中处理异步逻辑的不同类型 - S.No. 异步路由器和描述 1 路由器暂停承诺 可以通过从模型钩子返回promise来暂停转换。 2 当Promises拒绝 如果在转换期间模型拒绝承诺,则将中止转换。 3 Recovering from Rejection 从中止的过渡中恢复。
我使用的是Spring的@计划和@异步注释。 我的目的 计划一个同步方法——它运行一个for循环,而这个循环将运行一个异步方法,因此循环中的下一个值不需要等到方法完成。 见下面我的代码: 问题: 我的异步方法不会在不同的任务上运行。只有在我将@Async注释也放在我的计划方法上时,它才起作用。但我的计划方法将异步运行到,这不是我想要的。计划的方法需要同步运行,但for循环中被调用的方法需要异步运行
谢了。
我正在使用spring-cloud-starter(即..带有所有微服务特性的spring boot)。当我在一个使用javanica@hystrixCommand注释的组件中创建hystrix方法时,请按照javanica github站点(https://github.com/netflix/hystrix/tree/master/hystrix-contrib/hystrix-javanic
问题内容: 我试图运行一个异步进程,但我不希望程序等到这些进程执行结束。我发现了这个问题,如何从Java程序中异步运行shell脚本,但是它没有我想要的答案。 我正在做的只是运行bash进程,而在运行bash进程后,我不希望Java程序等到完成为止。这是我所做的: 我还在main方法的末尾放出了另一张印刷品,因此得到以下输出: 但是,程序不会终止,因为这两个进程尚未终止。 我该如何解决这个问题?
我最近--就像今天一样--对学习用Clojure编程产生了兴趣。现在,在安装了最新版本的Java jdk并下载了leiningen脚本之后,我遵循了后者的安装说明,特别是在http://www.lispcast.com/clojure-ubuntu上提供的说明。 现在,在运行并下载相关的jar文件之后,程序退出时会出现一个关于找不到类的错误。该错误如下: 线程“main”java.lang.Exc