|
Spec-Zone .ru
спецификации, руководства, описания, API
|
Отметьте: Это руководство по развертыванию Java описывает функции, выпущенные до Java SE 6 обновлений 10 выпусков. См. Java Богатый документ Разработки и Развертывания Интернет-приложений для последней информации.
Выполняя апплет в браузере, используя Sun Среда выполнения Java™ (JRE™), мертвая блокировка может произойти, если методы апплета сверхсинхронизируются, особенно наследованные от java.awt.Component. Тот же самый апплет работает под Microsoft Virtual Machine (VM).
Библиотеками class AWT иногда пользуются разработчики как ориентированные на многопотоковое исполнение библиотеки class. Выполняемые действия апплетов через AWT использование многократных потоков, учитывая, что библиотеки class заботились бы о проблемах синхронизации.
Однако, библиотеки class AWT гарантируют потокобезопасность только, когда вызовы будут выполнены от события AWT, диспетчеризируют поток. Поскольку реализация Microsoft VM и Sun отличается, опасный потоком код, который работает без инцидентного под одним VM, мог бы перестать работать под другим.
Одна плохая практика, используемая некоторыми апплетами, должна синхронизировать каждый метод апплета, чтобы избежать возможных условий состязания или мертвых блокировок в Microsoft VM. Однако, эта практика может привести к мертвым блокировкам.
Чтобы работать вокруг этой проблемы, используйте синхронизацию в апплете только там, где это действительно необходимо, и удалите ненужную синхронизацию. Например:
public synchronized void paint(Graphics g) {
....
}
public synchronized void dispose() {
super.dispose();
.....
}
public synchronized void stop() {
....
}
public synchronized void destroy() {
....
}
В этом случае, synchronized ключевое слово в paint, dispose, stop, и destroy методы должны быть удалены, потому что их всегда вызывают от выделенного потока: paint и dispose потоком диспетчеризации события AWT; stop и destroy потоком апплета. Код должен быть изменен следующим образом:
public void paint(Graphics g) {
....
}
public void dispose() {
super.dispose();
.....
}
public void stop() {
....
}
public void destroy() {
....
}
Учебное руководство по Java обсуждает проблемы потока и методы, которые применяются и к AWT и к программам Swing: .