|
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 поля, которые не могут быть изменены после объекта, создаются, может быть безопасно считан через несинхронизируемые методы, когда-то объект создается), Эта стратегия эффективна, но может представить проблемы с живым, как мы будем видеть позже в этом уроке.