点击此处查看最新的网赚项目教程

thread.join_threadjoint_threadjoin函数

Join方法的使用,简单来说就是把指定的线程加入到当前线程,可以将两个交替执行的线程合并为顺序执行。比如在线程 B 中调用了线程 A 的 Join()方法,直到线程 A 执行完毕后,才会继续执行线程 B。

代码示例如下所示:

package cn.lspj.ch1.base;
public class UseJoin {
static class A implements Runnable { private Thread thread;
public A() { }
public A(Thread thread) { this.thread = thread; }
@Override public void run() { System.out.println("A 等待执行 ..."); if (thread != null) { try { thread.join(); // 线程A中调用了线程B的join方法,需要等待线程B执行完毕后A才能执行 } catch (InterruptedException e) { e.printStackTrace(); } } try { Thread.sleep(2000); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println(Thread.currentThread().getName() + " ,A 执行完毕 ..."); } }
static class B implements Runnable {
@Override public void run() { System.out.println("B 等待执行 ..."); try { Thread.sleep(2000); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println(Thread.currentThread().getName() + " ,B 执行完毕 ..."); } }
public static void main(String[] args) throws InterruptedException { Thread c = Thread.currentThread();
B b = new B(); Thread threadB = new Thread(b); // 线程B
//A a = new A(); A a = new A(threadB); Thread threadA = new Thread(a); // 线程A threadA.start(); threadB.start(); System.out.println("C 等待执行 ..."); threadA.join(); // 当前线程C中调用了线程A的join方法,需要等待线程A执行完毕后C才能执行 Thread.sleep(2000); // 主线程休眠2秒 System.out.println(Thread.currentThread().getName() + " ,C 执行完毕 ..."); }
}

代码执行结果如下:

A 等待执行 ...C 等待执行 ...B 等待执行 ...Thread-0 ,B  执行完毕 ...Thread-1 ,A  执行完毕 ...main ,C  执行完毕 ...

从执行结果不难看出,如果当前线程C中调用了线程A的join方法,需要等待线程A执行完毕后C才能执行,线程A中调用了线程B的join方法,需要等待线程B执行完毕后A才能执行。

如果main方法代码如下,修改为不适用join方法。

public static void main(String[] args) throws InterruptedException {        Thread c = Thread.currentThread();
B b = new B(); Thread threadB = new Thread(b); // 线程B
A a = new A(); //A a = new A(threadB); Thread threadA = new Thread(a); // 线程A threadA.start(); threadB.start(); System.out.println("C 等待执行 ..."); //threadA.join(); // 当前线程C中调用了线程A的join方法,需要等待线程A执行完毕后C才能执行 Thread.sleep(2000); // 主线程休眠2秒 System.out.println(Thread.currentThread().getName() + " ,C 执行完毕 ..."); }

代码执行结果如下:

C 等待执行 ...A 等待执行 ...B 等待执行 ...main ,C  执行完毕 ...Thread-1 ,A  执行完毕 ...Thread-0 ,B  执行完毕 ...

多次运行输出结果可能还不一样,因此,如果想要两个线程按指定顺序执行,则使用线程的Join即可。

———END———
限 时 特 惠: 本站每日持续更新海量各大内部创业教程,一年会员只需98元,全站资源免费下载 点击查看详情
站 长 微 信: cai842612