Здравствуйте!
Изучаю сейчас многопоточность в 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 этих задач параллельно, но каким образом определяется и осуществляется вывод? Это, получается, зависит от того, как планировщик переключается между процессами?