Spec-Zone .ru
спецификации, руководства, описания, API
|
Язык программирования Java обеспечивает две основных идиомы синхронизации: синхронизируемые методы и синхронизировали операторы. Более сложные из этих двух, синхронизировал операторы, описываются в следующем разделе. Этот раздел о синхронизируемых методах.
Чтобы сделать метод синхронизируемым, просто добавьте synchronized
ключевое слово к его объявлению:
public class SynchronizedCounter { private int c = 0; public synchronized void increment() { c++; } public synchronized void decrement() { c--; } public synchronized int value() { return c; } }
Если count
экземпляр SynchronizedCounter
, тогда создание этих синхронизируемых методов имеет два эффекта:
Отметьте, что конструкторы не могут синхронизироваться — использование synchronized
ключевое слово с конструктором является синтаксической ошибкой. Синхронизация конструкторов не имеет смысла, потому что только у потока, который создает объект, должен быть доступ к этому, в то время как это создается.
List
вызванный instances
содержа каждый экземпляр class. Вы могли бы испытать желание добавить следующую строку к своему конструктору: instances.add(this);
instances
чтобы получить доступ к объекту перед, конструкция объекта полна. Синхронизируемые методы включают простой стратегии предотвращения интерференции потока и ошибок непротиворечивости памяти: если объект видим больше чем к одному потоку, всем чтениям или пишет в переменные того объекта, делаются через synchronized
методы. (Важное исключение: final
поля, которые не могут быть изменены после объекта, создаются, может быть безопасно считан через несинхронизируемые методы, когда-то объект создается), Эта стратегия эффективна, но может представить проблемы с живым, как мы будем видеть позже в этом уроке.