Подтвердить что ты не робот

Что такое переходные и летучие модификаторы?

Может кто-нибудь объяснить, что означают модификаторы transient и volatile в Java?

4b9b3361

Ответ 1

Модификаторы volatile и transient применяются к полям классов.

Модификатор transient сообщает подсистеме сериализации объектов Java исключить это поле при сериализации экземпляра класса. Когда объект затем десериализуется, поле будет инициализировано значением по умолчанию; т.е. null для ссылочного типа, и нуль или false для примитивного типа. Обратите внимание, что JLS (см. 8.3.1.3) не говорит, что означает transient, но отступает от Спецификация сериализации объектов Java. Другие нестандартные механизмы сериализации также могут обратить внимание на поле transient -ness.

Модификатор volatile сообщает JVM, что запись в поле всегда должна быть синхронно сброшена в память, и чтение этого поля должно всегда считываться из памяти. Это означает, что поля, помеченные как изменчивые, могут быть безопасно доступны и обновлены в многопоточном приложении без использования встроенной или стандартной библиотеки на основе синхронизации. Точно так же чтение и запись в изменчивые поля являются атомарными. (Это не относится к → нелетучим полям < long или double, которые могут подвергаться "разрыву слова" на некоторых JVM.) Соответствующие части JLS составляют 8.3.1.4, 17.4 и 17.7.

Ответ 2

Volatile означает, что другие потоки могут редактировать эту конкретную переменную. Таким образом, компилятор разрешает доступ к ним.

http://www.javamex.com/tutorials/synchronization_volatile.shtml

Transient означает, что при сериализации объекта он будет возвращать значение по умолчанию для де-сериализации

http://www.geekinterview.com/question_details/2

Ответ 3

летучее и переходное ключевое слово

1) ключевое слово transient используется вместе с переменными экземпляра, чтобы исключить их из процесса сериализации. Если поле является переходным, его значение не будет сохранено.

С другой стороны, ключевое слово volatile используется для обозначения переменной Java как "хранимой в основной памяти".

Каждое чтение изменчивой переменной будет считываться из основной памяти компьютера, а не из кэша ЦП, и что каждая запись в изменчивую переменную будет записана в основную память, а не только в кеш процессора.

2) ключевое слово transient не может использоваться вместе со статическим ключевым словом, но volatile может использоваться вместе со статикой.

3) переходные переменные инициализируются значением по умолчанию во время де-сериализации и назначение или восстановление значения должно обрабатываться кодом приложения.

Для получения дополнительной информации см. мой блог:
http://javaexplorer03.blogspot.in/2015/07/difference-between-volatile-and.html