2012-02-16 6 views
1

同じコントローラフィールドを使用する2つのアクションメソッドを持つコントローラがある場合を考えてみましょう。このフィールドは遅く初期化する必要があります。Playのフィールド同期!コントローラ

public class SomeController extends Controller { 
    private static volatile Resource resource; 

    private static Resource getResource() { 
     if (resource == null) { 
      synchronized (SomeController.class) { 
       if (resource == null) { 
        resource = new Resource(); 
       } 
      } 
     } 

     return resource; 
    } 

    public static void action1() { 
     getResource().doSomeAction(); 
    } 

    public static void action2() { 
     getResource().doSomeAnotherAction(); 
    } 

} 

Play Frameworkを使用して共通のリソースを同期する良い方法はありますか?リソースを遅延初期化する必要があると考えてください。

おかげで、 エイドリアン定期的なサーブレットを使用してサーブレットコンテナ(Tomcatのなど)、プレイ中や他の人でレイジーロードされたクラス(フィールド)との違いはありません

答えて

0

。ダブルチェックロックを使用するコードは正常に動作するはずです。しかし、私はダブルチェックロック(それが壊れていなくても)を避けることをお勧めします。単にメソッドを同期させるだけです。

関連する問題