Java Thread.join不工作
对join()的调用保证会导致当前线程停止执行,直到与之连接的线程停止为止 (换句话说,它调用join()的线程)完成 但是,在我的程序中,两个线程同时执行。Thread1没有等待Thread2完成其执行。 我的程序有什么问题?Java Thread.join不工作,java,multithreading,Java,Multithreading,对join()的调用保证会导致当前线程停止执行,直到与之连接的线程停止为止 (换句话说,它调用join()的线程)完成 但是,在我的程序中,两个线程同时执行。Thread1没有等待Thread2完成其执行。 我的程序有什么问题? public class Launcher1 { public static void main(String[] args) { JoinExample runnable=new JoinExample(); Thread
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();
}
}
}
}
公共类启动器1{
公共静态void main(字符串[]args){
JoinExample runnable=新的JoinExample();
线程线程1=新线程(可运行);
螺纹2=新螺纹(可运行);
thread1.start();
试一试{
《睡眠》(2000年);
}捕捉(中断异常e1){
e1.printStackTrace();
}
thread2.start();
试一试{
螺纹2.连接();
}捕捉(中断异常e){
e、 printStackTrace();
}
}
}
公共类JoinExample实现了Runnable{
公开募捐{
对于(int i=0;i
然而,在我的程序中,两个线程同时执行。Thread1并没有等待Thread2完成它的执行
不,也不会-因为线程1没有调用join
。请再次查看您引用的文档:
对join()的调用保证会导致当前线程停止执行,直到与之连接的线程停止执行
换句话说:join()
方法在调用它的线程完成之前不会完成
您的程序中有三个线程—两个线程正在运行JoinExample.run
,另一个“主”线程启动另外两个线程。您告诉该主线程等待线程2完成,但仅此而已。您的两个JoinExample
线程是完全独立的。这里讨论了三个线程。
第一个线程-主线程,它运行main方法并生成两个子线程。
第二个线程-thread1
第三个线程-thread2
当您说thread2.join()
时,主线程将阻塞,直到thread2
完成,thread1
和thread2
将继续运行。谢谢,我很感激!!