10.1. Модель легковесных процессов в Java
Java использует подпроцессы для того,
чтобы сделать среду программирования асинхронной. После того, как подпроцесс
запущен, его выполнение можно временно приостановить (suspend). Если подпроцесс остановлен (stop), возобновить его выполнение
невозможно. У подпроцессов имеются приоритеты. Приоритеты подпроцессов — это
просто целые числа в диапазоне от 1 до 10 и имеет смысл только соотношения
приоритетов различных подпроцессов. Приоритеты же используются для того, чтобы
решить, когда нужно остановить один подпроцесс и начать выполнение другого. Это
называется переключением контекста. Правила просты. Подпроцесс может
добровольно отдать управление — с помощью явного системного вызова или при
блокировании на операциях ввода-вывода, либо он может быть приостановлен
принудительно. В первом случае проверяются все остальные подпроцессы, и
управление передается тому из них, который готов к выполнению и имеет самый
высокий приоритет. Во втором случае низкоприоритетный подпроцесс независимо от
того, чем он занят, приостанавливается принудительно для того, чтобы начал
выполняться подпроцесс с более высоким приоритетом. Поскольку подпроцессы
вносят в ваши программы асинхронное поведение, должен существовать способ их
синхронизации. Для этой цели в Java реализовано развитие старой модели синхронизации процессов с помощью
монитора. Если вы разделили свою программу на логические части - подпроцессы,
вам нужно определить, как эти части будут общаться друг с другом. Java предоставляет для этого удобное
средство — два подпроцесса могут «общаться» друг с другом, используя методы wait и notify. Работать с параллельными
подпроцессами в Java
несложно. Язык предоставляет
явный, тонко настраиваемый механизм управления созданием подпроцессов,
переключения контекстов, приоритетов, синхронизации и обмена сообщениями между
подпроцессами.