Класс Thread
Уберем в листинге 17.1 комментарии, задержав тем самым выполнение каждой итерации цикла на 0.1 секунды. Пустая обработка исключения InterruptedException означает, что мы игнорируем попытку прерывания работы подпроцесса. На рис. 17.2 показан результат двух запусков программы. Как видите, процессор переключается с одного подпроцесса на другой, но в одном месте регулярность переключения нарушается и ранее запущенный подпроцесс завершается позднее.
Рис. 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(); } }