2011-10-21 14 views
5

私はデザインパターンを学ぼうとしています。 This siteは​​というキーワードを使用していますが、その内容はわかりません。Javaの「同期」とは何ですか?

ネットで検索したところ、マルチスレッドとメモリに多少関連していることがわかりましたが、私は機械技術者であり、その意味を理解していません。

スレッドと​​というキーワードを教えてもらえますか?

+3

'synchronized'は、java、特定のキーワードです。 –

+1

リンクのコードはC++ではありません。 – Skizz

+1

最初のポイントは、リンクしたコードサンプルがC++ではないJavaであることです。 –

答えて

12

C++には​​キーワードがありません。

方法it means the following two thingsのために場所をJavaで一つは、しかし、があります。

  • それはインターリーブする同じオブジェクトの同期メソッドの2つの呼び出しは可能ではありません。あるスレッドがオブジェクトの同期メソッドを実行しているとき、そのオブジェクトで最初のスレッドが完了するまで、同じオブジェクトブロックの同期メソッドを呼び出す他のすべてのスレッド(実行を中断)。
  • 同期メソッドが終了すると、同じオブジェクトの後続の同期メソッドの呼び出しと自動的に先行関係が確立されます。これにより、オブジェクトの状態の変更がすべてのスレッドで認識できることが保証されます。

Similar rules apply to arbitrary blocks

また、査読された本から学習することをおすすめします。非正式なWebサイトではありません。 (Java)の例

public static synchronized Singleton getInstance() 

+0

ありがとう@tomalak :) –

+0

@CAD_coding:問題ありません –

8

は、一度に一つのスレッドは、これがレース状態を回避するためのgetInstance()メソッドにアクセスすることができなければならないことを意味します。

+0

_per-objectのみ。_ –

+0

@andersとても助かりました –

3

コメント欄に既に指摘されているように、synchronizedはJavaキーワードです。

これは、メソッドが同時に2つのスレッドで実行できないことを意味し、JVMはそれを強制的に処理します。

C++では、クリティカルセクションやミューテックスのような同期構造を使用する必要があります。 thisに相談することができます。

0

1つのスレッドがデータの読み取りを試み、他のスレッドが同じデータを更新しようとすると、 が矛盾した状態になります。

これは、データにアクセス を同期させることによって防ぐことができます。 使用「同期」方法:

public synchronized void update() 
{ 
… 
} 
関連する問題