Javaシリアライゼーション109同期キーの使用とその注意点、カスタムアノテーション

1.同期キーワード

1.最後のシリアライゼーションでwithdrawメソッドを変更しましょう

 

  // メモリ変数の同期化の目的を達成するための方法のメンバーにまですることができsynchronizedキーワードを追加し

  、パブリック 同期 無効撤退(ダブルマネー){ 

      ダブルをした後= この .balance - お金を、

      試してみる{ 

        // ここに我々は意図的に少し遅れて、あなたはバランスを見ることができます間違った

        のThread.sleep( 1000年); 

      } キャッチ(InterruptedExceptionあるE){ 

       

      } 

      この.setBalance(後); 

  }

 

 

これらの2つの方法では、キーワード制御範囲が大きくなり、将来的にはますます多くのコードが効率を低下させる可能性があります。これは、正確に同期されるコードブロックほど効率的ではありません。

スレッドセーフなクラスの例:StringBuffer \ Vector \ HashTable

事件を説明させてください

 

パッケージcom.bjpowernode.java_learning; 


パブリック クラスD109_1_SynchronizedMechanism { 

  公共 静的 ボイドメイン(文字列[]引数)をスローInterruptedExceptionある{ 

    MyClass109 MC = 新しい)(MyClass109します。

    Processer109 p = 新しいProcesser109(mc); 

    スレッドt1 = new Thread(p); 

    スレッドt2 = 新しいThread(p); 

    t1.setName( "t1" ); 

    t2.setName( "t2" ); 

    t1.start(); 

   

    // 延迟(保证t1线程先启动、および执行実行)

    Thread.sleep( 1000 ); 

    t2.start(); 

  } 
} 



クラス Processer109 実装Runnableを{ 

  MyClass109 MC。

  public Processer109(MyClass109 mc){ 

    this .mc = mc; 

  } 

  public  void run(){ 

    if(Thread.currentThread()。getName()。equals( "t1" )){ 

      mc.m1(); 

    } 

    if(Thread.currentThread()。getName()。equals( "t2" )){ 

      mc.m2(); 

    } 

  } 

} 

クラスMyClass109 { 

  public  synchronized  voidm1(){ 

    // sleep 

    try { 

      Thread.sleep( 1500 ); 

      System.out.println( "m1 ....." ); 

    } catch (例外w){ 

     

    } 

  } 

  // m2メソッドはm1メソッドが終了するのを待つ、t1とt2はmcを共有し、このキーワードはm1とm2の両方のメソッドで共有するため、オブジェクトを共有しますmc 

  public  synchronized  void m2(){ 

    System.out.println( "m2 ......" ); 

  } 

//   // m2メソッドは同期されていないため、m2メソッドの実行はm1の終了を待つ必要はありません

//   public void m2(){ 

//     System.out.println( "m2 ......"); 

//   } 

}

第二に、システム注釈の使用

 

パッケージはcom.bjpowernode.java_learning; 


インポートjava.util.LinkedList; 


パブリック クラスD109_2_SuperClass { 

  公共 静的 ボイドメイン(文字列[]引数){ 

    SuperClass109 superObj = 新しい新しいSuperClass109(); 

    superObj.MethodA(); //は時代遅れアクセスメソッドは、IDEが取り消し線を追加します

    System.out.println(superObj.var); // 古いドメインにアクセスし、取り消し線も追加し

    ますSubClass109 subObj = new SubClass109 (); 

    subObj.MethodB1(); 

    // - ------------ 

    // 次の注釈は、

    @ SuppressWarnings(以下のステートメントのコンパイル警告メッセージを抑制するために使用されます"rawtypes" 

    LinkedList list = new LinkedList(); 

    // 次の2つのステートメントでは@SuppressWarningsは追加されません
コンパイル中に警告メッセージが表示されます
    。add( 123 ); 

    list.add( "Beijing" ); 

    forint i = 0; I <2; I ++ ){ 

      System.out.printlnは(List.get(I)); 

    } 

   

  } 
} 



クラスSuperClass109 { 

  // 注釈VARに、varは表しはvarが古いものの、古く、それでもよいですUse 

  @Deprecated 

  int var = 125 ; 

  @Deprecated 

  public  void MethodA(){ 

    System.out.println("Method()method in parent class!" ); 

  } 

  Public  void MethodB(){ 

    System.out.println( "MethodB method in parent class!" ); 

  } 

 

} 

Class SubClass109 extends SuperClass109 { 

  // @Override 

  public  void MethodB1(){ 

    System.out.printlnは( "メソッドMethodBサブクラスは、(親クラスをオーバーライドします)!" ); 

  } 

}

3.カスタムアノテーション

1.カスタムアノテーションは、java.lang.annotation.Annotationインターフェースを自動的に継承する@interfaceを使用して宣言する必要があります。

2.カスタムアノテーションを定義する場合、他のアノテーションやインターフェースを継承することはできません。@ Interfaceはアノテーションの宣言にのみ使用されます。アノテーションの各メソッドは実際には構成パラメータです。

3.メソッドの名前はパラメーターの名前であり、戻り値の型はパラメーターの型です。戻り値の型は、基本的なデータ型であるClass、String、Enumのみです。パラメータのデフォルト値は、defaultキーワードを使用して宣言できます。

4.文法フォーマット

 

[ public | final ] @ インターフェース   アノテーション名{ 

  アノテーション要素

}

 

 

その中で、キーワード@Interfaceはカスタムアノテーションを宣言することを意味し、「アノテーション名」は正当な識別子、「アノテーション要素」はパラメーターのないメソッド、メソッドのタイプはアノテーション要素のタイプです。

アノテーション要素の構文形式

 

データ型注釈要素名()[ デフォルト   ]

 

 

アノテーション要素が1つのみの場合、アノテーション要素がvalueという名前の場合、アノテーション要素の使用時にアノテーション要素名を書き出す必要はなく、アノテーション値を直接付与するだけでよい。カスタムアノテーションを使用する場合は、前の行またはアノテーションを必要とする同じ行のカスタムアノテーションを解放し、カスタムアノテーションの後の括弧内にアノテーション要素の値を記述します。デフォルト値を使用する場合、紙媒体を指定することはできません。アノテーション要素が1つしかなく、値に名前が付けられている場合は、アノテーション要素名を指定する代わりに値を指定するだけで済みます。

第四に、ソースコード:

D109_1_SynchronizedMechanism.java

D109_2_SuperClass.java

https://github.com/ruigege66/Java/blob/master/D109_1_SynchronizedMechanism.java

https://github.com/ruigege66/Java/blob/master/D109_2_SuperClass.java

2.CSDN:https://blog.csdn.net/weixin_44630050

3.ブログパーク:https://www.cnblogs.com/ruigege0000/

4. WeChat公開番号に注意を払うことを歓迎します:フーリエ変換、個人公開番号、学習と通信にのみ使用され、バックグラウンドで「ギフトパック」と返信し、ビッグデータの学習資料を取得します

 

 

おすすめ

転載: www.cnblogs.com/ruigege0000/p/12688684.html