Читать «Java: руководство для начинающих» онлайн - страница 366

Герберт Шилдт

Методы wait () и notify () служат для . взаимодействия потоков

Внесите в класс TickTock изменения для организации настоящего отчета времени. Первую половину секунды должен занимать вывод на экран слова "Tick", а вторую — вывод слова "Tock". Таким образом, сообщение "Tick-Tock" должно соответствовать одной секунде отсчитываемого времени. (Время переключения контекстов можно не учитывать.) Для организации отчета времени достаточно ввести в классе TickTock вызовы метода sleep (), как показано ниже. // Вариант класса TickTock, в который введены вызовы // метода sleep() для организации отсчета времени. class TickTock { String state; // Состояние часов synchronized void tick(boolean running) { 582 Javc,/: руководство для начинающих, 5-е издание if(!running) { // остановить часы state = "ticked"; notifyO; // уведомить ожидающие потоки return; } System.out.print("Tick "); // ожидать 1/2 секунды try { Thread.sleep(500); } catch(InterruptedException exc) { System.out.println("Thread interrupted."); } state = "ticked"; // установить текущее состояние после такта "тик" notifyO; // разрешить выполнение метода tock() try { while(!state.equals("tocked")) wait (); // ожидать завершения метода tock() } catch(InterruptedException exc) { System.out.println("Thread interrupted."); } synchronized void tock(boolean running) { if(!running) { // остановить часы state = "tocked"; notifyO; // уведомить ожидающие потоки return; } System.out.println("Tock"); // ожидать 1/2 секунды try { Thread.sleep(500); } catch(InterruptedException exc) { System.out.println("Thread interrupted."); } state = "tocked"; // установить текущее состояние после такта "так" notifyO; // разрешить выполнение метода tick() try { while(!state.equals("ticked")) wait (); // ожидать завершения метода tick() } catch(InterruptedException exc) { System.out.println("Thread interrupted."); } Приложение А. Ответы на вопросы для самопроверки 583 } }

Почему в новых программах на Java не следует применять методы suspend (), resume() и stop()? Методы suspend (), resume () и stop () не рекомендуется применять, поскольку они могут стать причиной серьезных осложнений при выполнении программы.

С помощью какого метода из класса Thread можно получить имя потока? С помощью метода getName ().

Какое значение возвращает метод is Alive () ? Он возвращает логическое значение true, если вызывающий поток исполняется, или логическое значение false, если поток завершен. Глава 12. Перечисления, автоупаковка,

статический импорт и аннотации

Константы перечислимого типа иногда называются самотипизированными. Что это означает? Часть “само” в термине самотипизированный означает тип перечисления, в котором определена константа. Следовательно, константа перечислимого типа является объектом того перечисления, в которое она входит.

Какой класс автоматически наследуют перечисления? Все перечисления наследуют от класса Enum.

Напишите для приведенного ниже перечисления программу, в которой метод values () служит для отображения списка констант и их значений. enum Tools { SCREWDRIVER, WRENCH, HAMMER, PLIERS } Это задание имеет следующее решение: enum Tools { SCREWDRIVER, WRENCH, HAMMER, PLIERS } class ShowEnum { public static void main(String args[]) { for(Tools d : Tools.values()) System.out.print(d + " has ordinal value of " + d.ordinal() + '\n'); } }