JavaマルチスレッドSynchronizedの注意事項


自動回転
http://hi.baidu.com/javalang/item/50f965117e5034f8dceeca82
      最近javaマルチスレッドの開発処理をしていますが、synchronizedの使用にはまだ細かい問題があります。
      1.synchronizedとstatic synchronizedの違い
      synchronizedは、クラスの現在のインスタンスをロックし、他のスレッドが同時にこのクラスのこの例のすべてのsynchronizedブロックにアクセスすることを防止する。ここでは「クラスの現在のインスタンス」であり、クラスの2つの異なる例にはこのような制約はない。static synchronizedは、コントロールクラスのすべてのインスタンスにアクセスします。static synchronizedは、制限スレッドが同時にjvmにアクセスするという種類のすべてのインスタンスが、同時に対応するコードにアクセスするのが早いです。実際には、クラスの中にある方法やコードブロックにsynchronizedがあり、このクラスのインスタンスを生成すると、クラス変更も監視が速くなり、スレッドの同時アクセスが改例synchronized保護が速くなり、static synchronizedはこのクラスのインスタンスを共有する監視が速くなり、すなわち2つの違いがあります。に対する
static synchronized   Something.synchronized.
            -    《java       》        :
      pulbic class Something(){
         public synchronized void isSyncA(){}
         public synchronized void isSyncB(){}
         public static synchronized void cSyncA(){}
         public static synchronized void cSyncB(){}
     }
   では、Somethingクラスの2つのインスタンスaとbを追加すると、次のグループの方法は、1つ以上のスレッドに同時にアクセスされますか?
   a.   x.isSyncA()とx.isSyncB()
   b.   x.isSyncA()とy.isSyncA()
   c.   x.cyncA()とy.cyncB()
   d.   x.isSyncA()とSomething.cyncA()
    ここでは、はっきりと判断できます。
   aは、いずれも同じ例のsynchronizedドメインにアクセスするため、同時にアクセスできない。
   bは、異なる実例についてのものであり、同時にアクセスすることができる。
   c,static synchronizedであるため、異なる例の間は依然として制限されており、Somethings.isSynca()と   Somethingn.isSyncB()になりましたので、同時に訪問することはできません。
   では、dは本の中の答えは同時に訪問することができます。答えの理由は、synchronzedの場合、実例的な方法とsynchronzedの方法はロックによって違います。
   個人分析では、synchronizedとstatic synchronizedは2つの派閥に相当し、それぞれが各自を管理しています。お互いの間には制約がなく、同時に訪問することができます。Javaの内部デザインのsynchronzedがどのように実現されているかはまだ分かりません。
    結論:A:synchronized staticはある種類の範囲で、synchronized static cSync{}複数のスレッドが同時にこれにアクセスするのを防止します。    クラスの中のsynchronized static方法。クラスのすべてのオブジェクトインスタンスに対して機能することができます。
  
               B:synchronizedはある実例の範囲であり、synchronized isSyncc()は複数のスレッドが同時にこの例のsynchronizedメソッドにアクセスすることを防止する。
     2.synchronized方法とsynchronizedコードの早い違い
      synchronized methods(){}とsynchronized()の間には何の違いもありませんが、synchronized methods(){}は読みやすく、synchronized{}より正確に衝突を制御してアクセスエリアを制限することができ、より効率的に表現できる場合があります。
     3.synchronizedのキーワードは引き継げません。
     これは
http://www.learndiary.com/archives/diaries/2910.htm文で見たのですが、これも注目すべき点だと思います。継承時のサブクラスのカバー方法は、synchronizedと定義されているものを表示しなければなりません。