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


Предупреждение: создавая объект, который будет совместно использован потоками, быть очень осторожным, который ссылка на объект не "пропускает" преждевременно. Например, предположите, что Вы хотите поддержать a List вызванный instances содержа каждый экземпляр class. Вы могли бы испытать желание добавить следующую строку к своему конструктору:
instances.add(this);
Но тогда другие потоки могут использовать instances чтобы получить доступ к объекту перед, конструкция объекта полна.

Синхронизируемые методы включают простой стратегии предотвращения интерференции потока и ошибок непротиворечивости памяти: если объект видим больше чем к одному потоку, всем чтениям или пишет в переменные того объекта, делаются через synchronized методы. (Важное исключение: final поля, которые не могут быть изменены после объекта, создаются, может быть безопасно считан через несинхронизируемые методы, когда-то объект создается), Эта стратегия эффективна, но может представить проблемы с живым, как мы будем видеть позже в этом уроке.


Проблемы с примерами? Попытайтесь Компилировать и Выполнить Примеры: FAQ.
Жалобы? Поздравление? Предложения? Дайте нам свою обратную связь.

Предыдущая страница: Ошибки Непротиворечивости Памяти
Следующая страница: Внутренние Блокировки и Синхронизация