Иллюстрированный самоучитель по Java

Класс Thread

Уберем в листинге 17.1 комментарии, задержав тем самым выполнение каждой итерации цикла на 0.1 секунды. Пустая обработка исключения InterruptedException означает, что мы игнорируем попытку прерывания работы подпроцесса. На рис. 17.2 показан результат двух запусков программы. Как видите, процессор переключается с одного подпроцесса на другой, но в одном месте регулярность переключения нарушается и ранее запущенный подпроцесс завершается позднее.

Иллюстрированный самоучитель по Java › Подпроцессы › Класс Thread
Рис. 17.2. Подпроцессы работают с задержкой

Как же добиться согласованности, как говорят, синхронизации (synchronization) подпроцессов? Обсудим это ниже, а пока покажем еще два варианта создания той же самой программы.

В листинге 17.2 приведен второй вариант той же программы: сам класс TwoThreads2 является расширением класса Thread, а метод run () реализуется прямо в нем.

Листинг 17.2. Класс расширяет Thread.

class TwoThreads2 extends Thread{
private String msg;
TwoThreads2(String s, String name){
super(name); msg = s;
}
public void run(){
for(int i = 0; i < 20; i++){
try{
Thread.sleep(100);
}catch(InterruptedException ie){}
System.out.print(msg + " ");
}
System.out.println("End of " + getName());
}
public static void main(String[] args)(
new TwoThreads2("HIP", "Thread 1").start();
new TwoThreads2("hop", "Thread 2").start();
System.out.println();
}
}
Если Вы заметили ошибку, выделите, пожалуйста, необходимый текст и нажмите CTRL + Enter, чтобы сообщить об этом редактору.