Что было раньше: яйцо или курица? ⇐ JAVA
-
Гость
Что было раньше: яйцо или курица?
Суть задачи заключается в том, чтобы определить победителя в своем споре, не используя волатильные переменные, блокировки, синхронизированные блоки/методы и так далее, в распоряжении join, Slip и isAlive. В моем следующем коде результат иногда правильный, а иногда неправильный. И я понимаю почему, ведь иногда, даже если яйцо заканчивается позже курицы, оно закончится к моменту достижения проверки isAlive. Так можно ли вообще добиться 100% правильного результата с помощью этих инструментов?
публичный класс EggOrChicken { статический поток eggThread = eggVoice(); статический поток ChickenThread = ChickenVoice(); public static void main(String[] args) выдает InterruptedException { System.out.println("начало спора..."); eggThread.start(); ChickenThread.start(); ChickenThread.join(); если (eggThread.isAlive()) { eggThread.join(); System.out.println("Первое было яйцо!"); } еще { System.out.println("Первая была курица!"); } System.out.println("Конец спора!"); } общественный статический поток eggVoice() { вернуть новый поток(() -> { для (int я = 0; я { для (int я = 0; я
Суть задачи заключается в том, чтобы определить победителя в своем споре, не используя волатильные переменные, блокировки, синхронизированные блоки/методы и так далее, в распоряжении join, Slip и isAlive. В моем следующем коде результат иногда правильный, а иногда неправильный. И я понимаю почему, ведь иногда, даже если яйцо заканчивается позже курицы, оно закончится к моменту достижения проверки isAlive. Так можно ли вообще добиться 100% правильного результата с помощью этих инструментов?
публичный класс EggOrChicken { статический поток eggThread = eggVoice(); статический поток ChickenThread = ChickenVoice(); public static void main(String[] args) выдает InterruptedException { System.out.println("начало спора..."); eggThread.start(); ChickenThread.start(); ChickenThread.join(); если (eggThread.isAlive()) { eggThread.join(); System.out.println("Первое было яйцо!"); } еще { System.out.println("Первая была курица!"); } System.out.println("Конец спора!"); } общественный статический поток eggVoice() { вернуть новый поток(() -> { для (int я = 0; я { для (int я = 0; я
Мобильная версия