Могу ли я пометить переменные как временные, чтобы они не были засечены?

Модель памяти Java позволяет JVM оптимизировать обратный доступ и, например, если это однопоточное приложение, если поле не отмечено как volatile или доступ с блокировкой (история немного усложняется блокировки фактически).

В приведенном примере JVM может сделать вывод, что поле ready не может быть изменено в текущем потоке, поэтому оно заменило бы !ready на false, в результате чего бесконечная петля. Маркировка поля как volatile приведет к тому, что JVM будет проверять значение поля каждый раз (или, по крайней мере, гарантировать, что изменения ready распространяются на текущий поток).

16
задан SCdF 11 June 2011 в 01:04
поделиться

2 ответа

Согласно документации Pickle , вы можете предоставить метод с именем __getstate__(), который возвращает что-то, представляющее состояние, которое вы хотите мариновать (если оно не предоставлено, pickle использует thing.__dict__ ]). Таким образом, вы можете сделать что-то вроде этого:

class Thing:
      def __getstate__(self):
            state = dict(self.__dict__)
            del state['cachedBar']
            return state

Это не должно быть диктом, но если это что-то другое, вам также нужно реализовать __setstate__(state).

23
ответ дан lvc 11 June 2011 в 01:04
поделиться

Реализовать __getstate__ , чтобы вернуть только те части объекта, которые должны быть засолены

3
ответ дан AJ. 11 June 2011 в 01:04
поделиться
Другие вопросы по тегам:

Похожие вопросы: