English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
多线程環境で使用されるvolatileキーワードは、2つのスレッドが同時に同じ変数を読み書きする場合に使用されます。volatileキーワードは変更を直接メインメモリに反映させ、CPUキャッシュに反映させるのではなく、直接メインメモリに反映させます。
一方、シリアライズプロセスではtransientキーワードを使用しています。瞬間的にマークされたフィールドはシリアライズやデシリアライズの一部にはなりません。何も変数の値を保存したくない場合は、その変数と瞬間的なキーワードを一緒に使用します。
番号 | キー | 易失性の | 一時的な |
---|---|---|---|
1 | 基本的な | 変更を直接メインメモリに反映させるためにVolatileキーワードを使用します | シリアライズ中に変数を除外するために一時的なキーワードを使用します |
2。 | デフォルト値 | 揮発性はデフォルト値で初期化しません。 | 反序列化中に、デフォルト値で瞬間変数を初期化します |
3 | 静的 | 可変性は静的変数と一緒に使用できます。 | 一時的にstaticキーワードと一緒に使用できません |
4 | 最後に | finalキーワードと一緒に使用できます | 瞬間はfinalキーワードと一緒に使用できません |
// 瞬間キーワードを使用するサンプルクラス //シリアライズをスキップ。 class TransientExample implements Serializable { transient int age; //他のフィールドのシリアライズ private String name; private String address; //他のコード }
class VolatileExmaple extends Thread{ boolean volatile isRunning = true; public void run() { long count = 0; while (isRunning) { count++; } System.out.println("スレッド終了。" + 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); } }