考虑这样一种情况,当我们有一个具有两个动作方法的控制器,这两个动作方法使用相同的控制器字段。此字段应延迟初始化。
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同步公共资源有哪些更好的方法?考虑到资源应该是延迟初始化的。
谢谢,艾利安
发布于 2012-02-17 03:13:01
这与Play中的延迟加载类(字段)或使用常规servlet的其他servlet容器(tomcat等)没有区别。使用双重检查锁定的代码应该工作得很好。但我建议您避免双重检查锁定(即使它没有损坏),只需使您的方法同步即可。
https://stackoverflow.com/questions/9315743
复制相似问题