Почему join не останавливает 2 поток?

195
23 февраля 2018, 18:00

Добрый день.не совсем понел работу метода join(); у класса Thread Есть 2 потока у первого вызывается метод join но второй отказывается ждать его .Почему?

public class Thrd {
    public static void main(String[] args) throws InterruptedException {
        MyThread myThread = new MyThread();
        MyThread1 myThread1 = new MyThread1();
        myThread.start();
        myThread1.start();
        myThread.join();
    }
}

вот 1 поток

class MyThread extends Thread{
    @Override
    public void run() {
        try {
            for(int i = 0 ; i<100;i++){ 
                System.out.println(i + "  potok 0"); 
                Thread.sleep(10);
            }
        } catch (InterruptedException ex) {
            Logger.getLogger(MyThread.class.getName()).log(Level.SEVERE, null, ex);
        }
    }
}

а вот и 2 ой

class MyThread1 extends Thread{
    @Override
    public void run() {
        try {
            for(int i = 0 ; i<100;i++){ 
                System.out.println(i + "  potok 1"); 
                Thread.sleep(10);
            }
        } catch (InterruptedException ex) {
            Logger.getLogger(MyThread.class.getName()).log(Level.SEVERE, null, ex);
        }
    }
}
Answer 1

Второй поток и не должен ждать первый. Ждать будет главный поток, вызвавший эти 2 потока и затем вызвавший метод join().

Чтобы главный поток дождался вызванных им потоков: о синхронизации потоков в Java

Из документации:

join() - Waits for this thread to die.

а под капотом у метода join() цикл

while (isAlive()) {
    wait(0);
}

т.е. вызывающий поток ждет вызванный. Никакие другие потоки в расчет не берутся.

READ ALSO
Переход на активность при нажатии на пункт RecyclerView

Переход на активность при нажатии на пункт RecyclerView

Есть RecyclerView который выводит несколько пунктовУ каждого пункта своя разметка

157
Настройка распознавания лиц в OpenCV

Настройка распознавания лиц в OpenCV

У меня есть набор изображений для обучения: для двух персон по 10 изображений и 80 изображений различных персон для проверки достоверности...

195
Dagger крашится если использую @Named

Dagger крашится если использую @Named

Если удалить @Named, все работаетНо мне нужно Named

154