我希望子线程在主线程继续运行之前完成。
启动线程后,我调用join
,我认为在继续主线程之前我会完成子线程,但抛出一些我无法理解为什么它会抛出错误。
以下是我的代码:
class FirstThread implements Runnable{
Thread t;
String threadname;
FirstThread(String name){
threadname = name;
t = new Thread(this,threadname);
System.out.println(name+" Starting");
t.start();
}
public void run(){
try{
for(int i=0; i < 5; i++){
System.out.println(threadname+" : "+ i);
Thread.sleep(500);
}
}catch(InterruptedException e){
System.out.println("Exception: "+ e);
}
}
}
public class ThreadJoin {
public static void main(String args[]){
System.out.println("Starting child Thread");
FirstThread ft = new FirstThread("new thread");
ft.t.join();
try{
for(int i =0; i < 5; i++){
System.out.println("Main : "+i);
Thread.sleep(1000);
}
}catch(InterruptedException e){
System.out.println("Exception : "+ e);
}
}
}
我有以下代码
FirstThread ft = new FirstThread("new thread");
ft.t.join();
使用ft.t.join
创建新主题并首先完成。
但它会引发错误:
线程“main”中的异常java.lang.Error:未解析的编译 问题:未处理的异常类型InterruptedException
在ThreadJoin.main(ThreadJoin.java:29)
第29行
ft.t.join();
如果我删除上面的行就可以了。
答案 0 :(得分:1)
Thread#join
声明它会抛出InterruptedException
。你必须以某种方式处理它 - 要么允许调用者抛出它,要么抓住它。只需移动catch
区域内的违规行,您就可以了:
try {
ft.t.join(); // Here!
for (int i =0; i < 5; i++) {
System.out.println("Main : "+i);
Thread.sleep(1000);
}
} catch(InterruptedException e){
System.out.println("Exception : "+ e);
}