Java 线程加入

原文
A A
White Sepia Night


Java 线程加入

由  chalex 创建,小路依依 最后一次修改  2017-01-09

Java线程教程 - Java线程加入


线程可以等待另一个线程死亡或终止。

例子

假设有两个线程,t1和t2。如果线程t1调用t2.join(),线程t1开始等待,直到线程t2终止。

调用t2.join()阻塞直到t2终止。

如果其中一个线程无法继续,直到另一个线程完成执行,在程序中使用join()方法是很有用的。

下面的代码有一个例子,当程序完成执行时,它在标准输出上打印一条消息。

public class Main {
  public static void main(String[] args) {
    Thread t1 = new Thread(Main::print);
    t1.start();
    System.out.println("Done.");
  }

  public static void print() {
    for (int i = 1; i <= 5; i++) {
      try {
        System.out.println("Counter: " + i);
        Thread.sleep(1000);
      } catch (InterruptedException e) {
        e.printStackTrace();
      }
    }
  }
}

上面的代码生成以下结果。

从结果我们可以看到“完成”。被打印在来自真实线程的消息之前。 t1.start(); 刚刚启动该线程,它会阻断执行,并等待线程完成。

下面的代码使用join()等待线程完成,然后打印“完成”。

public class Main {
  public static void main(String[] args) {
    Thread t1 = new Thread(Main::print);
    t1.start();
    try {
      t1.join();
      // "main" thread waits until t1 is terminated
    } catch (InterruptedException e) {
      e.printStackTrace();
    }
    System.out.println("Done.");
  }

  public static void print() {
    for (int i = 1; i <= 5; i++) {
      try {
        System.out.println("Counter: " + i);
        Thread.sleep(1000);
      } catch (InterruptedException e) {
        e.printStackTrace();
      }
    }
  }
}

上面的代码生成以下结果。

注意

Thread类的join()方法是重载的。

其他两个版本接受超时参数。

如果我们使用join()方法和超时,调用者线程将等待,直到它被调用的线程被终止或超时已经过去。

我们应该在线程启动后调用join()方法。

如果我们在未启动的线程上调用join()方法,它立即返回。

如果我们在终止的线程上调用join()方法,它立即返回。

var tempFontsize = .cookie("fontsize");
if (tempFontsize != undefined) {
.cookie("fontsize");if (tempFontsize != undefined) {
("#pro-mian").addClass(tempFontsize); }
您的支持将鼓励我们做得更好
    赞赏支持
    • 0
      点赞
    • 0
      收藏
      觉得还不错? 一键收藏
    • 0
      评论

    “相关推荐”对你有帮助么?

    • 非常没帮助
    • 没帮助
    • 一般
    • 有帮助
    • 非常有帮助
    提交
    评论
    添加红包

    请填写红包祝福语或标题

    红包个数最小为10个

    红包金额最低5元

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

    抵扣说明:

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

    余额充值