Java с использованием obj.threadobj.join выдает ошибку - PullRequest
0 голосов
/ 09 июня 2018

Я хочу, чтобы дочерний поток завершил работу, прежде чем основной поток продолжит свою работу.

После запуска потока я вызываю 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 голосов
/ 09 июня 2018

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);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...