Создание множества потоков

До сих пор вы использовали только два потока: главный и один дочерний. Однако ваша программа может порождать столько потоков, сколько необходимо. Например, в следующей программе создаются три дочерних потока.

// Создание множества потоков.
class NewThread implements Runnable {
String name; // имя потока
Thread t;
NewThread(String threadname) {
name = threadname;
t = new Thread(this, name);
System.out.println("Новый поток: " + t) ;
t.start(); // запустить поток
}
// Входная точка потока.
public void run () {
try {
for(int i = 5; i > 0; i—) {
System.out.println(name + ": " + i);
Thread.sleep(1000);
}
}
catch (InterruptedException e) {
System.out.println(name +" прерван");
}
System.out.println(name + " завершен.");
}
}
class MultiThreadDemo {
public static void main(String args[]) {
new NewThread("Один"); // запуск потоков
new NewThread("Два");
new NewThread("Три");
try {
// ожидание завершения других потоков
Thread.sleep(10000);
}
catch (InterruptedException e) {
System.out.println("Главный поток прерван");
System.out.println("Главный поток завершен.");
}
}

Вывод этой программы показан ниже:

Новый поток: Thread[Один,5,main]
Новый поток: Thread[Два,5,main]
Новый поток: Thread[Три,5,main]
Один: 5
Два: 5
Три: 5
Один: 4
Два: 4
Три: 4
Один: 3
Три: 3
Два: 3
Один: 2
Три: 2
Два: 2
Один: 1
Три: 1
Два: 1
Один завершен.
Два завершен.
Три завершен.
Главный поток завершен.

Как видите, будучи запущенными, все три дочерних потока разделяют ресурс центрального процессора. Обратите внимание на вызов sleep (10000) в main (). Это заставляет главный поток "уснуть" на 10 секунд и гарантирует, что он будет завершен последним.