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 或其他使用常规 servlet 的 servlet 容器(tomcat 等)中的延迟加载类(字段)没有区别。您的带有双重检查锁定的代码应该可以正常工作。但我建议你避免双重检查锁定(即使它没有被破坏),只需让你的方法同步。

于 2012-02-16T19:13:00.590 回答