欢迎光临散文网 会员登陆 & 注册

java线程池中何使用CountDownLatch和Future来实现等待所有线程执行完毕并获取返回值的

2023-04-01 10:42 作者:燕洼仙草  | 我要投稿

如果你需要使用Callable接口来替代Runnable接口来执行任务,可以使用ExecutorService.submit(Callable)方法来提交任务,该方法会返回一个Future对象,该对象可以用来获取任务的返回值。

以下是一个示例代码,展示了如何使用CountDownLatch和Future来实现等待所有线程执行完毕并获取返回值的功能:

上述代码与之前的示例代码类似,但是使用了Callable接口来执行任务,提交任务的方法也由executor.submit(Runnable)变为了executor.submit(Callable),同时List<Future> futures用来存储每个任务的Future对象,以便在所有任务执行完毕后获取它们的返回值。在每个Callable任务的call()方法中,除了执行任务之外,还使用latch.countDown()方法将计数器的值减1,并返回一个整数值1作为该任务的返回值。

在等待所有线程执行完毕之后,可以使用Future.get()方法获取每个任务的返回值,并将它们累加到sum变量中。最后输出计数器的值以及所有任务的返回值之和,并关闭线程池。

执行上述代码的结果应该是类似于以下的输出:


java线程池中何使用CountDownLatch和Future来实现等待所有线程执行完毕并获取返回值的的评论 (共 条)

分享到微博请遵守国家法律