java - должен ли я объявить мою общую переменную-член слушателя как изменчивую?

У меня есть простой класс, который выполняет некоторые вычисления в собственном потоке и сообщает результаты слушателю.

class Calculator extends Thread {
    protected Listener listener;

    public void setListener(Listener l) {
        listener = l;
    }

    public void run() {
        while (running) {
            ... do something ...

            Listener l = listener;

            if (l != null) {
                l.onEvent(...);
            }
        }
    }
}

В любое время пользователь может вызвать setListener (null) , если он не хочет никаких событий в течение определенного периода времени. Итак, в функции run () я создаю копию слушателя, поэтому я не могу столкнуться с исключением NullPointerException , которое может произойти, если для слушателя установлено значение null после ! = Null проверка условия выполнена успешно. В моем случае я считаю, что это правильная альтернатива для его синхронизации.

Мой вопрос: следует ли мне объявить здесь переменную участника-слушателя как изменчивую? Я много читал о volatile, но все примеры, похоже, нацелены на основные типы данных (логические, int, ...), а не на объекты. Поэтому я не уверен, следует ли / можно ли объявлять объекты изменчивыми. Я считаю, что должен объявить его как изменчивый, поэтому в потоке всегда будет последняя версия переменной-члена, но я не уверен.

Спасибо!

5
задан Japer D. 22 November 2011 в 17:34
поделиться