点击此处查看最新的网赚项目教程
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 等待执行 ...
,B 执行完毕 ...
,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 执行完毕 ...
,A 执行完毕 ...
Thread-0 ,B 执行完毕 ...
多次运行输出结果可能还不一样,因此,如果想要两个线程按指定顺序执行,则使用线程的Join即可。
———END———
限 时 特 惠: 本站每日持续更新海量各大内部创业教程,一年会员只需98元,全站资源免费下载 点击查看详情
站 长 微 信: cai842612
声明:本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。