@WTFAYD

Как определяется порядок вывода текста в многопоточной программе?

Здравствуйте!
Изучаю сейчас многопоточность в Java, и возник небольшой вопрос.
Допустим, есть такая программа:
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

class Task implements Runnable {
    private int countdown = 5;
    @Override
    public void run() {
        while (countdown-- > 0)
            System.out.println(Thread.currentThread().getName() + "- (" + countdown + ")");
    }
}

public class Program {
    public static void main(String[] args) {
        ExecutorService exc = Executors.newFixedThreadPool(5);
        for (int i = 0; i < 5; i++) {
            exc.execute(new Task());
        }
        exc.shutdown();
    }
}

И вывод, например, получается такой:
pool-1-thread-1- (4)
pool-1-thread-1- (3)
pool-1-thread-1- (2)
pool-1-thread-1- (1)
pool-1-thread-1- (0)
pool-1-thread-2- (4)
pool-1-thread-2- (3)
pool-1-thread-2- (2)
pool-1-thread-2- (1)
pool-1-thread-2- (0)
pool-1-thread-3- (4)
pool-1-thread-3- (3)
pool-1-thread-3- (2)
pool-1-thread-3- (1)
pool-1-thread-3- (0)
pool-1-thread-5- (4)
pool-1-thread-5- (3)
pool-1-thread-5- (2)
pool-1-thread-5- (1)
pool-1-thread-5- (0)
pool-1-thread-4- (4)
pool-1-thread-4- (3)
pool-1-thread-4- (2)
pool-1-thread-4- (1)
pool-1-thread-4- (0)

Как я правильно понял, все 5 созданных потоков выполняют 5 этих задач параллельно, но каким образом определяется и осуществляется вывод? Это, получается, зависит от того, как планировщик переключается между процессами?
  • Вопрос задан
  • 191 просмотр
Решения вопроса 1
@Cr2ed
Это "китайский рандом". Одна и та же программа с каждым запуском будет выводить данные в разном порядке.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы