线程的join方法

join的作用

当我们调用某个线程的这个方法时,这个方法会挂起调用线程,直到被调用线程结束执行,调用线程才会继续执行

join()

public class ThreadJoin {

  public static void main(String[] args) {
    Thread t1 =
        new Thread(
            () -> {
              IntStream.range(1, 100)
                  .forEach(i -> System.out.println(
                          Thread.currentThread().getName() + "->" + i));
            });
    Thread t2 =
            new Thread(
                    () -> {
                      IntStream.range(1, 100)
                              .forEach(i -> System.out.println(
                                      Thread.currentThread().getName() + "->" + i));
                    });
    t1.start();
    t2.start();
    try {
      t1.join();
      t2.join();
    } catch (InterruptedException e) {
      e.printStackTrace();
    }
    Optional.of("all tasks finished").ifPresent(System.out::println);
    IntStream.range(1, 100)
            .forEach(i -> System.out.println(
                    Thread.currentThread().getName() + "->" + i));
  }

  /**
   * 如果没有join,t1和main交互执行
   * Thread-0->1
   * main->1
   * Thread-0->2
   * main->2
   * main->3
   *
   * t1、t2加入join会交替执行,因为是多线程,不是单线程,但是main会等到t1、t2都结束后再执行
   * 加入join 被调用(t1、t2)线程执行结束后,才执行调用(main)线程
   * */
}

join(long millis, int nanos)

public class ThreadJoin1 {
  public static void main(String[] args) {
    Thread t1 =
        new Thread(
            () -> {
              try {
                System.out.println("t1 is running");
                Thread.sleep(10_000);
                System.out.println("t1 is done");
              } catch (InterruptedException e) {
                e.printStackTrace();
              }
            });
    t1.start();
    try {
      // 如果t1在100毫秒没执行完,10纳秒之后main线程开始执行
      t1.join(100,10);
    } catch (InterruptedException e) {
      e.printStackTrace();
    }
    IntStream.range(1, 100)
            .forEach(i -> System.out.println(
                    Thread.currentThread().getName() + "->" + i));
  }
}

join():主线程调用子线程,子线程执行结束后才会调用主线程继续执行

join(long millis, int nanos):在规定(millis)时间内如果join的线程没有执行完,(nanos)时间后开始执行主线程.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

乐观的Terry

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值