English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
Ключевое слово volatile используется в многопоточных средах, где две нити одновременно читают и пишут на одну и ту же переменную. Ключевое слово volatile напрямую обновляет изменения в основную память, а не в кэш CPU.
С другой стороны, в процессе сериализации используется ключевое слово transient. Поля, помеченные как transient, не могут быть частью сериализации и десериализации. Мы не хотим сохранять значения任何一个 переменной, поэтому мы используем ключевое слово transient вместе с этой переменной.
Номер | Ключ | Легковоспламеняющиеся | Кратковременные |
---|---|---|---|
1 | Основные | Ключевое слово volatile используется для прямого обновления изменений в основную память | Ключевое слово transient используется для исключения переменных из сериализации |
2. | Значения по умолчанию | Вolatile не использует значения по умолчанию для инициализации. | Во время десериализации будут использоваться значения по умолчанию для инициализации транзитных переменных |
3 | Статический | Вolatile может использоваться с статическими переменными. | Временно не может использоваться с ключевым словом static |
4 | В конце | Моментальный может использоваться с ключевым словом final | Моментальный не может использоваться с ключевым словом final |
//A sample class that uses transient keyword to //Skip serialization. class TransientExample implements Serializable { transient int age; //Serialize other fields private String name; private String address; //Other code {}
class VolatileExmaple extends Thread{ boolean volatile isRunning = true; public void run() { long count = 0; while (isRunning) { count++; {} System.out.println("Thread terminated. " + count); {} public static void main(String[] args) throws InterruptedException { VolatileExmaple t = new VolatileExmaple(); t.start(); Thread.sleep(2000); t.isRunning = false; t.join(); System.out.println("isRunning set to " + t.isRunning); {} {}