| |
оды suspend и resume позволяют, соответственно, временно приостанавливать
и возобновлять работу задачи. Мы уже пользовались этими методами в приложении
Rectangles для приостановки и возобновления работы задачи рисования
прямоугольников.
Задача приостанавливалась, когда курсор мыши оказывался над окном аплета:
public boolean mouseEnter(Event evt, int x, int y)
{
if (m_Rectangles != null)
{
m_Rectangles.suspend();
}
return true;
}
Работа задачи возобновлялась, когда курсор мыши покидал окно аплета:
public boolean mouseExit(Event evt, int x, int y)
{
if (m_Rectangles != null)
{
m_Rectangles.resume();
}
return true;
}
Ожидание извещения
Если вам нужно организовать взаимодействие задач таким образом, чтобы одна
задача управляла работой другой или других задач, вы можете воспользоваться
методами wait, notify и notifyAll, определенными в классе Object.
Метод wait может использоваться либо с параметром, либо без параметра. Этот
метод переводит задачу в состояние ожидания, в котором она будет находиться до
тех пор, пока для задачи не будет вызван извещающий метод notify, notifyAll,
или пока не истечет период времени, указанный в параметре метода wait.
Как пользоваться методами wait, notify и notifyAll?
Метод, который будет переводиться в состояние ожидания, должен быть
синхронизированным, то есть его следует описать как synchronized:
public synchronized void run()
{
while (true)
{
. . .
try
{
Thread.wait();
}
catch (InterruptedException e)
{
}
}
}
В этом примере внутри метода run определен цикл, вызывающий метод wait без
параметров. Каждый раз при очередном проходе цикла метод run переводится в
состояние ожидания до тех пор, пока другая задача не выполнит извещение с
помощью метода notify.
Ниже мы привели пример задачи, вызывающией метод notify:
public void run()
{
while (true)
{
try
{
Thread.sleep(30);
}
catch (InterruptedException e)
|
|