java spring 并行调用_Spring并行执行方法

小编典典

对于您使用AsyncResult的原因(以及哪个实现…

ejb?),我有些困惑。如果我没记错的话,它就不会那样工作,因为(据我所知)AsyncResult已连接到bean和@Asyncronous注释,从而使特定bean方法的响应异步。但是,如果在对象内部使用,它将是有效顺序的。

您这里需要的是正常的未来。如果是这样,则需要在执行程序中实际运行这些Future,然后等待调用future.get()直到它们完成。您可以在这里找到一个不错的教程:http

:

//java.dzone.com/articles/javautilconcurrentfuture

您也可以研究Akka。演员模型是我个人的最爱,因为您可以简单地产生一堆工人,告诉他们该怎么做,并让他们在完成工作后告诉您。如果您手头只有一个简单的任务,这仍然是一个矫over过正的选择,具体取决于您的风格。

ExecutorService pool = Executors.newFixedThreadPool(10);

public static void populate(String marketId) {

//irrelevant code removed

List companies = mongo().find(new Query(c), Company.class);

List futures = new ArrayList();

for(Company comp : companies) {

futures.add(comp.updateData(market));

}

for(Future future: futures) {

future.get()

}

}

public Future updateData(Market market) {

return pool.submit(new Callable() {

@Override

public Void call() throws Exception {

//do your slow stuff here;

return false;

}

})

}

当然,如果您需要从这些期货中获得一些实际回报,这很有意义。如果它们是无效的,并且您只需要一个线程在其他地方运行某些副作用,那么这样做就没有意义了,您可以简单地使用runnables和executor。

2020-06-01

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值