Java高并发专题之31、等待线程完成的方式你知道几种?

本文探讨在Java高并发环境中,如何等待其他线程完成执行并获取结果,包括Thread的join()、CountDownLatch、ExecutorService.submit、FutureTask以及CompletableFuture的多种实现方式。每种方法的代码示例和效果都进行了展示,同时提供了相关知识点的参考资料,以加深理解和应用。
摘要由CSDN通过智能技术生成

java高并发系列已经学了不少东西了,本篇文章,我们用前面学的知识来实现一个需求:

在一个线程中需要获取其他线程的执行结果,能想到几种方式?各有什么优缺点?

结合这个需求,我们使用6种方式,来对之前学过的知识点做一个回顾,加深记忆。

方式1:Thread的join()方法实现

代码:


     
     
     
  1. package com.itsoku.chat31;
  2. import java.sql.Time;
  3. import java.util.concurrent.*;
  4. /**
  5. * 跟着阿里p7学并发,微信公众号:javacode2018
  6. */
  7. public class Demo1 {
  8. //用于封装结果
  9. static class Result<T> {
  10. T result;
  11. public T getResult() {
  12. return result;
  13. }
  14. public void setResult(T result) {
  15. this.result = result;
  16. }
  17. }
  18. public static void main(String[] args) throws ExecutionException, InterruptedException {
  19. System.out.println(System.currentTimeMillis());
  20. //用于存放子线程执行的结果
  21. Result<Integer> result = new Result<>();
  22. //创建一个子线程
  23. Thread thread = new Thread(() -> {
  24. try {
  25. TimeUnit.SECONDS.sleep(3);
  26. result.setResult(10);
  27. } catch (InterruptedException e) {
  28. e.printStackTrace();
  29. }
  30. });
  31. thread.start();
  32. //让主线程等待thread线程执行完毕之后再继续,join方法会让当前线程阻塞
  33. thread.join();
  34. //获取thread线程的执行结果
  35. Integer rs = result.getResult();
  36. System.out.println(System.currentTimeMillis());
  37. System.out.println(System.currentTimeMillis() + ":" + rs);
  38. }
  39. }

输出:


     
     
     
  1. 1566733162636
  2. 1566733165692
  3. 1566733165692:10

代码中通过join方式阻塞了当前主线程,当thread线程执行完毕之后,join方法才会继续执行。

关于join()方法和线程更详细的使用,可以参考:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值