Java
 Computer >> コンピューター >  >> プログラミング >> Java

Javaでの揮発性と一時的な違い


volatileキーワードは、2つのスレッドが同じ変数を同時に読み書きするマルチスレッド環境で使用されます。 volatileキーワードは、CPUキャッシュではなく、変更をメインメモリに直接フラッシュします。

一方、transientキーワードは、シリアル化中に使用されます。一時としてマークされたフィールドは、シリアル化および逆シリアル化の一部にすることはできません。変数の値を保存したくない場合は、その変数で一時的なキーワードを使用します。

揮発性 一時的
Sr。いいえ。 キー
1
基本
Volatileキーワードは、変更をメインメモリに直接フラッシュするために使用されます
transientキーワードは、シリアル化中に変数を除外するために使用されます
2。
デフォルト値
Volatileはデフォルト値で初期化されません。
逆シリアル化中、一時変数はデフォルト値で初期化されます
3
静的
Volatileは静的変数で使用できます。
Transientはstaticキーワードと一緒に使用できません
4
最終
Volatileはfinalキーワードで使用できます
Transientはfinalキーワードと一緒に使用できません

一時的な例

// A sample class that uses transient keyword to
// skip their 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);
   }
}

  1. Javaでのイテレータと列挙の違い

    IteratorとEnumerationはどちらも、コレクションの要素をトラバースしてアクセスするためのカーソルです。どちらもコレクションフレームワークに属しています。列挙は、コレクションフレームワークのJDK1.2バージョンのJDK1.0およびIteratorで追加されました。 コレクション内の要素への読み取り専用アクセス権があるため、列挙型はコレクション内の構造を変更できません。次の方法があります: * hasMoreElements() * nextElement() 一方、イテレータはコレクション内の要素を読み取って削除できます。以下の方法があります- * hasNe

  2. JavaでのArrayListとHashSetの違い

    HashSetとArrayListはどちらも、Javaコレクションフレームワークの最も重要なクラスの一部です。 以下は、ArrayListとHashSetの重要な違いです。 Sr。いいえ。 キー ArrayList ハッシュセット 1 実装 ArrayListはリストインターフェイスの実装です。 一方、 HashSetは、セットインターフェイスの実装です。 2 内部実装 ArrayListは、その実装のために配列を内部的に実装します。 HashSetは、実装にHashmapを内部的に使用します。 3 要素の順序 ArrayListは、挿入順序、つまり