使用obj.threadobj.join的Java会引发错误

时间:2018-06-09 07:57:25

标签: java multithreading exception compiler-errors

我希望子线程在主线程继续运行之前完成。

启动线程后,我调用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();

如果我删除上面的行就可以了。

1 个答案:

答案 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);
}