1

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

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を使用して共通リソースを同期するためのより良い方法は何ですか?リソースは遅延初期化する必要があることを考慮してください。

ありがとう、エイドリアン

4

1 に答える 1

0

Play または通常のサーブレットを使用する他のサーブレット コンテナー (Tomcat など) の遅延ロードされたクラス (フィールド) との違いはありません。ダブルチェックロックを使用したコードは正常に動作するはずです。ただし、ロックの二重チェックは避けて (壊れていなくても)、単にメソッドを同期させることをお勧めします。

于 2012-02-16T19:13:00.590 に答える