Добрый день.не совсем понел работу метода 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);
}
}
}
Второй поток и не должен ждать первый. Ждать будет главный поток, вызвавший эти 2 потока и затем вызвавший метод join().
Чтобы главный поток дождался вызванных им потоков: о синхронизации потоков в Java
Из документации:
join() - Waits for this thread to die.
а под капотом у метода join() цикл
while (isAlive()) {
wait(0);
}
т.е. вызывающий поток ждет вызванный. Никакие другие потоки в расчет не берутся.
Виртуальный выделенный сервер (VDS) становится отличным выбором
Есть RecyclerView который выводит несколько пунктовУ каждого пункта своя разметка
У меня есть набор изображений для обучения: для двух персон по 10 изображений и 80 изображений различных персон для проверки достоверности...