多线程中join方法的含义

1、作用:调用这个方法的时候,主进程会在这里停住,等待该线程进行完毕再继续往下执行。

如:不使用join的情况:

<?php

class Join extends Thread
{
    public function run()
    {
        sleep(3);
        echo __FUNCTION__ . PHP_EOL;
    }
}

$join = new Join();
$join->start();

echo ‘just a test‘ . PHP_EOL;

 输出:

just a test
run

 使用join:

<?php

class Join extends Thread
{
    public function run()
    {
        sleep(3);
        echo __FUNCTION__ . PHP_EOL;
    }
}

$join = new Join();
$join->start();
$join->join();

echo ‘just a test‘ . PHP_EOL;

  输出:

run
just a test

  我们可以发现,使用join的时候,最后的echo语句需要等待线程运行完毕再运行。

2、为什么要join?

想想这样一种情况,线程执行时间过长,而且在要在后续代码中使用线程运行结果,

这样我们就可以使用join,防止主线程比子线程先结束,或者后续代码在线程结束之前就运行了从而获取不到线程处理结果。

3、使用join会导致进程阻塞,这个阻塞并不是目的,只是表现。并不是为了阻塞线程而使用join。

4、fork/join

时间: 2024-08-27 09:06:22

多线程中join方法的含义的相关文章

Java多线程中join方法详解

join()方法用于让当前执行线程等待join线程执行结束.其实现原理是不停的检查join线程是否存活,如果join线程存活则让当前线程永远等待. join()方法部分实现细节 while(isAlive()) { wait(0) } 其中wait(0)表示永远等待下去. join线程中止后,线程的this.notifyAll()方法会被调用,调用notifyAll()是在JVM里调用的所有在JDK中看不到,大家可以看JVM源码 示例程序: public calss ThreadTest{ pu

java多线程中join用法

thread.Join把指定的线程加入到当前线程,可以将两个交替执行的线程合并为顺序执行的线程.比如在线程B中调用了线程A的Join()方法,直到线程A执行完毕后,才会继续执行线程B. package com.wzs; /** * Java多线程中join用法 * * @author Administrator * */ public class JoinTest { public static void main(String[] args) { BThread bThread = new B

C#中Thread类中Join方法的理解(转载)

指在一线程里面调用另一线程join方法时,表示将本线程阻塞直至另一线程终止时再执行      比如 Java代码   using System; namespace TestThreadJoin { class Program { static void Main() { System.Threading.Thread x = new System.Threading.Thread(new System.Threading.ThreadStart(f1)); x.Start(); Console

Java多线程中join、yield、sleep方法详解

在Java多线程编程中,Thread类是其中一个核心和关键的角色.因此,对该类中一些基础常用方法的理解和熟练使用是开发多线程代码的基础.本篇主要总结一下Thread中常用的一些静态方法的含义及代码中的使用. sleep方法 源码如下: /** * Causes the currently executing thread to sleep (temporarily cease * execution) for the specified number of milliseconds, subje

[javaSE] 多线程(join方法)

多条线程并发执行,随机切换,调用join()方法,会使当前线程所在的线程(一般主线程)冻结,直到当前线程结束,所在的线程才恢复继续执行 class JoinTestDemo implements Runnable{ @Override public void run() { for(int x=0;x<=5;x++){ try { Thread.sleep(100); } catch (InterruptedException e) { // TODO Auto-generated catch

多线程中join的解释(转)

文章来源:https://www.zhihu.com/question/61446671 这个join可以理解为“加入”,其含义与英语里面讲“Come on,join us”中的join类似.假设线程t2执行t1.join(),那么t2线程要等待线程t1运行结束后才能够继续运行,在t2在执行t1.join()起到t1运行结束这段时间内会被暂停(线程状态不是RUNNABLE).如下图所示: 原文地址:https://www.cnblogs.com/Stephen-Qin/p/11373918.ht

Thread中join()方法进行介绍

http://www.cnblogs.com/skywang12345/p/3479275.html https://blog.csdn.net/dabing69221/article/details/17472901 原文地址:https://www.cnblogs.com/yufeng218/p/9932721.html

Java多线程中的join方法

新建一个Thread,代码如下: 1 package com.thread.test; 2 3 public class MyThread extends Thread { 4 private String name; 5 public MyThread(String name) { 6 this.name = name; 7 } 8 @Override 9 public void run() { 10 for (int i = 0; i < 100; i++) { 11 System.out.

ASP.NET Global中的方法

[ASP.NET 1.1]Global.asax.cs中的方法的含义  跟Request有关的放到后面一起说,先说其他的5个. Application_Init:在每一个HttpApplication实例初始化的时候执行. Application_Disposed:在每一个HttpApplication实例被销毁之前执行. Application_Error:所有没有处理的错误都会导致这个方法的执行. Application_Start:在程序初始化的时候执行.在Web应用程序的生命周期里就执行