検索

ホームページ  >  に質問  >  本文

java - volatile はスレッド共有データのセキュリティの問題を解決できますか?

たとえば、シングルトン モードを作成する場合は、sycrynized 同期メソッドを使用せず、揮発性変更を使用します。

プライベート シグルトン(){

}

プライベート静的揮発性 Sigleton s = null;

パブリック静的 Sigleton getInstance(){

リーリー

}

これでスレッドの安全性の問題は解決できるでしょうか?

スレッドの可視性を理解する方法

s==null の場合に 2 つのスレッドが同時に入ってくると、最終的に 2 つの新しい sigleton オブジェクトが作成されませんか?

欧阳克欧阳克2789日前1027

全員に返信(2)返信します

  • 女神的闺蜜爱上我

    女神的闺蜜爱上我2017-06-23 09:16:04

    new のオーバーヘッドが非常に小さい場合は、このように書いてもまったく問題ありません。ただし、初期化のオーバーヘッドが高い場合は、依然として synchronized を使用する必要があります。典型的な 二重チェックされたロック は次のように記述されます:

    リーリー

    返事
    0
  • 代言

    代言2017-06-23 09:16:04

    スレッドの可視性を理解する方法

    まずメモリモデルを理解してください。

    スレッドはメイン メモリ内の変数を直接変更しませんが、最初に独自の作業メモリを書き込み、次にそれをメイン メモリに同期します。同期されていない場合、他のスレッドは変更を認識しません (スレッドは引き続きその変更を参照します)。作業メモリの独自のキャッシュ)。

    返事
    0
  • キャンセル返事