Druzya.org
Возьмемся за руки, Друзья...
 
 
Наши Друзья

Александр Градский
Мемориальный сайт Дольфи. 
				  Светлой памяти детей,
				  погибших  1 июня 2001 года, 
				  а также всем жертвам теракта возле 
				 Тель-Авивского Дельфинариума посвящается...

Библиотека :: Компьютеры и Программирование :: А.В. Фролов, Г.В. Фролов - Microsoft Visual J++
<<-[Весь Текст]
Страница: из 275
 <<-
 
жаются защелками, которые могут быть 
использованы для блокировки задач, обращающихся к этим объектам.
   Чтобы воспользоваться защелками, вы можете объявить соответствующий метод 
как synchronized, сделав его синхронизированным:
public synchronized void decrement()
{
  . . .
}
   При вызове синхронизированного метода соответствующий ему объект (в котором 
он определен) блокируется для использования другими синхронизированными 
методами. В результате предотвращается одновременная запись двумя методами 
значений в область памяти, принадлежащую данному объекту.
   Использование синхронизированных методов - достаточно простой способ 
синхронизации задач, обращающихся к общим критическим ресурсам, наподобие 
описанного выше банковского счета.
   Заметим, что не обязательно синхронизовать весь метод - можно выполнить 
синхронизацию только критичного фрагмента кода.
. . .
synchronized(Account)
{
  if(Account.check(3000000))
     Account.decrement(3000000);
}
. . .
   Здесь синхронизация выполняется для объекта Account.
   Блокировка задачи
   Синхронизированная задача, определенная как метод типа synchronized, может 
переходить в заблокированное состояние автоматически при попытке обращения к 
ресурсу, занятому другим синхронизированным методом, либо при выполнении 
некоторых операций ввода или вывода. Однако в ряде случаев полезно иметь более 
тонкие средства синхронизации, допускающие явное использование по запросу 
приложения.
   Блокировка на заданный период времени
   С помощью метода sleep можно заблокировать задачу на заданный период времени.
 Мы уже пользовались этим методом в предыдущих приложениях, вызывая его в цикле 
метода run:
try
{
  Thread.sleep(500);
}
catch (InterruptedException ee)
{
  . . .
}
   В данном примере работа задачи Thread приостанавливается на 500 миллисекунд. 
Заметим, что во время ожидания приостановленная задача не отнимает ресурсы 
процессора.
   Так как метод sleep может создавать исключение InterruptedException, 
необходимо предусмотреть его обработку. Для этого мы использовали операторы try 
и catch.
   Временная приостановка и возобновление работы
   Ме
 
<<-[Весь Текст]
Страница: из 275
 <<-