Joh*_*mbo 2 java multithreading
对join()的调用保证使当前线程停止执行,直到它加入的线程(换句话说,它调用join()的线程)完成.
但是,在我的程序中,两个线程同时执行.Thread1没有等待Thread2完成执行.
我的计划有什么问题?
public class Launcher1 {
public static void main(String[] args) {
JoinExample runnable=new JoinExample();
Thread thread1=new Thread(runnable);
Thread thread2=new Thread(runnable);
thread1.start();
try {
Thread.sleep(2000);
} catch (InterruptedException e1) {
e1.printStackTrace();
}
thread2.start();
try {
thread2.join();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
public class JoinExample implements Runnable{
public void run(){
for(int i=0;i<10;i++){
System.out.println("i:"+i+" "+Thread.currentThread().getName());
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
输出:
i:0线程-0
我:1个线程-0
i:0线程-1
i:2个线程-0
我:1个线程-1
我:3个线程-0
我:4个线程-0
我:2个线程-1
我:3线程-1
我:5个线程-0
我:4线程-1
我:6个线程-0
我:7个线程-0
我:5线程-1
我:8个线程-0
我:6线程-1
我:7线程-1
我:9线程-0
我:8个线程-1
我:9线程-1
但是,在我的程序中,两个线程同时执行.Thread1没有等待Thread2完成执行.
不,它不会 - 因为线程1没有调用join.看看你再次引用的文档:
对join()的调用保证使当前线程停止执行,直到它加入的线程
换句话说:在join()调用它的线程完成之前,该方法不会完成.
你的程序中有三个线程 - 两个正在运行的JoinExample.run线程,以及启动另外两个线程的"主"线程.你告诉主线程等待线程2完成,但这就是全部.你的两个JoinExample线程是完全独立的.