Уважаемые, подскажите одну странную особенность... Если я в main для каждого потока не пишу joinы , то потоки выводят только "Увеличиваем: 1" и "Уменьшаем: 4"... Как я понимаю при запуске потока он должен полностью прогнаться, т.е. цикл должен пройти полностью, но этого не происходит и не какие exceptionы не вылетают... Я не могу понять почему с joinами while (true) отрабатывает как надо, а без них он как будто заканчивается после первой итерации.
Артём Стариков
25 уровень
Не совсем понятно решение, которое получилось
Обсуждается
Комментарии (12)
- популярные
- новые
- старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
Mikhail
23 августа 2019, 09:38
Та же фигня. Решаю на сайте.
Думаю, глюк валидатора, больше объяснить нечем.
+1
Dzmitry Huletski
26 марта 2019, 12:05
И тоже с джойном, как и у тебя, отрабатывает корректно )
0
Dzmitry Huletski
26 марта 2019, 11:58
У меня то же самое, выводит только две строки, ошибок не выскакивает.
Уменьшаем: 5
Увеличиваем: 1
Код примерно такой же, как у тебя. Вообще не понятно, почему цикл while не проходится до конца.
0
Артём Стариков
16 марта 2019, 09:15
public class Solution {
public static int number = 5;
public static void main(String[] args) throws Exception{
Thread th1 = new Thread(new CountdownRunnable(), "Уменьшаем");
Thread th2 = new Thread(new CountUpRunnable(), "Увеличиваем");
th1.start();
// th1.join();
th2.start();
// th2.join(); если убрать эти joinы , то в консоль идет вывод Уменьшаем: 5 , Увеличиваем: 1.
}
public static class CountdownRunnable implements Runnable {
private int countIndexDown = Solution.number;
public void run() {
try {
while (true) {
System.out.println(toString());
countIndexDown -= 1;
if (countIndexDown == 0) return;
Thread.sleep(500);
}
} catch (InterruptedException e) { }
}
public String toString() {
return Thread.currentThread().getName() + ": " + countIndexDown;
}
}
Для CountUpRunnable код почти что аналогичный
+1
VIKTOR NEZHELSKIYExpert
16 марта 2019, 08:35
Что можно сказать не видя код?
0
Артём Стариков
16 марта 2019, 09:15
Код закрепил выше.
0
Александр Backend Developer в Газпром Expert
16 марта 2019, 11:50
Ты его платно выкладываешь? Почему весь не скинуть?
>Как я понимаю при запуске потока он должен полностью прогнаться, т.е. цикл должен пройти полностью
Да должен
>и не какие exceptionы не вылетают...
ну даже если вылетают - у тебя там действия внутри нет.
И вызываться они не должны - их ничего не прерывает.
Скинь код полностью 0
Артём Стариков
17 марта 2019, 06:15
package com.javarush.task.task16.task1626;
public class Solution {
public static int number = 5;
public static void main(String[] args) throws Exception{
Thread th1 = new Thread(new CountdownRunnable(), "Уменьшаем");
Thread th2 = new Thread(new CountUpRunnable(), "Увеличиваем");
th1.start();
// th1.join();
th2.start();
// th2.join();
}
public static class CountdownRunnable implements Runnable {
private int countIndexDown = Solution.number;
public void run() {
try {
while (true) {
System.out.println(toString());
countIndexDown -= 1;
if (countIndexDown == 0) return;
Thread.sleep(500);
}
} catch (InterruptedException e) { }
}
public String toString() {
return Thread.currentThread().getName() + ": " + countIndexDown;
}
}
public static class CountUpRunnable implements Runnable {
private int countIndexUp = 1;
public void run() {
try {
while (true) {
System.out.println(toString());
countIndexUp += 1;
Thread.sleep(500);
if (countIndexUp >= Solution.number+1) return;
}
} catch (InterruptedException e) { }
}
public String toString() {
return Thread.currentThread().getName() + ": " + countIndexUp;
}
}
}
+2
Александр Backend Developer в Газпром Expert
17 марта 2019, 11:06
Запустил твой код - получил вот это - без всяких joinов работает как надо.
Убедись что ты запускаешь именно этот файл, а не какой-то другой:
0
Александр Backend Developer в Газпром Expert
17 марта 2019, 11:26
Вот мой код но он такой же.
0
Александр Backend Developer в Газпром Expert
18 марта 2019, 06:18
Вот этот твой код меня еще с толку сбил - замудрил мне кажется - посмотри как у меня сделано.
0
Wolterius
2 октября 2019, 17:42
У меня точь-в-точь такой же код. Вывод:
Увеличиваем: 1
Уменьшаем: 5
0