4

synchronizedキーワードの代わりに@Synchronized注釈が付いていたら、それは悪いことでしたか?この場合、アノテーションはより自然になりますか(synchronized同期されていないメソッドでメソッドをオーバーライドできるためsynchronized、メソッド自体については何も言わず、メソッドに加えて何かを指定します(メソッドは特定の方法で保護されます) 、それでそれは本当にキーワードではありませんか?)

4

4 に答える 4

4

同期はコードのブロックで使用され、コードのブロックに注釈を追加することはできません。

メソッドやクラスを使用することもできますが@synchronized、Javaが最初に導入されたとき、Javaはアノテーションをサポートしていませんでした。

それはそれ自身のキーワードに値するほど重要だと思います。;)

于 2012-09-19T16:00:57.243 に答える
2

かっこいいですが、アノテーションでsynchronizedキーワードを完全に置き換えることはできません。アノテーションでマークできない同期ブロックがあります。

さらに、同期ブロックは、同期に使用されるモニターを受け入れます。動的に供給することができるため、ある程度の柔軟性があります。すべてのパラメーターはコンパイル時に指定する必要があるため、注釈ではこれを許可しません。

于 2012-09-19T16:02:46.210 に答える
2

Synchronizedは、バイトコードレベルで実質的に直接monitorenter/monitorexitに変換します。そして、何を同期するかを指定しますが、注釈を付けてそれを行うことはできません。

synchronized (myLock) {
}

ですから、それがキーワードであることは私には完全に理にかなっています。

于 2012-09-19T16:11:54.007 に答える
1

おそらく同期のメソッドバージョンとして、はい。ただし、同期のもう1つの使用法では、同期しているモニターを指定できます。

public void someMethod()
{
  synchronized(this)
  {
    //sync code
  }
  //unsynced code.
}
于 2012-09-19T16:01:52.397 に答える