考虑一种情况,当我们拥有一个使用相同控制器字段的2个操作方法的Controller时。这个字段应该被懒惰地初始化。
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同步公共资源的更好方法是什么?考虑资源应该是懒惰的初始化。
谢谢, 阿德里安
答案 0 :(得分:0)
Play中或使用常规servlet的其他servlet容器(tomcat等)中的延迟加载类(字段)没有区别。具有双重检查锁定的代码应该可以正常工作。但我建议你避免双重检查锁定(即使它没有被破坏),只需让你的方法同步。