Иллюстрированный самоучитель по Java



              

Синхронизация подпроцессов - часть 3


}catch(InterruptedException ie){} 

System.out.println("World!"); 

}

public static void main(String[] args){ 

TwoThreads4 th = new TwoThreads4(); 

new Thread(th).start(); 

new Thread(th).start(); 

}

Рис. 17.3.

Синхронизация  метода

Действия, входящие в синхронизированный блок или метод образуют

критический участок

(critical section) программы. Несколько подпроцессов, собирающихся выполнять критический участок, встают в очередь. Это замедляет работу программы, поэтому для быстроты ее выполнения критических участков должно быть как можно меньше, и они должны быть как можно короче.

Многие методы Java 2 SDK синхронизированы. Обратите внимание, что на рис. 17.1 слова выводятся вперемешку, но каждое слово выводится полностью. Это происходит потому, что метод print о класса Printstream синхронизирован, при его выполнении выходной поток system, out блокируется до тех пор, пока метод print () не закончит свою работу.

Итак, мы можем легко организовать последовательный доступ нескольких подпроцессов к полям одного объекта с помощью оператора synchronized () {}. Синхронизация обеспечивает

взаимно исключающее

(mutually exclusive) выполнение подпроцессов. Но что делать, если нужен совместный доступ нескольких подпроцессов к общим объектам? Для этого в Java существует механизм ожидания и уведомления (wait-notify).




Содержание  Назад  Вперед