Java руководство для начинающих - Шилдт Герберт (2012)
-
Год:2012
-
Название:Java руководство для начинающих
-
Автор:
-
Жанр:
-
Оригинал:Английский
-
Язык:Русский
-
Издательство:Вильямс
-
Страниц:316
-
ISBN:978-5-8459-1770-6
-
Рейтинг:
-
Ваша оценка:
Java руководство для начинающих - Шилдт Герберт читать онлайн бесплатно полную версию книги
Средства многопоточного программирования дают возможность использовать периоды простоя, наступающие практически в любой программе. Когда операции в
одном потоке по каким-то причинам не выполняются, в действие вступают другие
потоки. В многоядерных системах два и больше потоков могут исполняться одновременно.
Для поддержки многопоточного программирования в Java предусмотрен класс
и интерфейс .
Для поддержки многопоточного программирования в Java предусмотрен класс
Thread и интерфейс Runnable.
В каких случаях следует отдать предпочтение расширению класса Thread над реализацией интерфейса Runnable?
Подклассы, производные от класса Thread, целесообразно создавать в тех случаях, когда, помимо метода run (), требуется переопределить другие методы данного
класса.
Покажите, как с помощью метода j о in () можно организовать ожидание завершения потокового объекта MyThrd.
MyThrd.join()
Покажите, как установить приоритет потока MyThrd на три уровня выше нормального приоритета.
MyThrd.setPriority(Thread.N0RM_PRI0RITY+3);
Что произойдет, если в объявлении метода указать ключевое слово synchronized?
Если указать ключевое слово synchronized в объявлении метода, то в каждый момент времени этот метод будет вызываться только в одном потоке для любого заданного объекта его класса.
Методы 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 () не рекомендуется применять, поскольку
они могут стать причиной серьезных осложнений при выполнении программы.