2012-02-16 77 views
1

考虑一种情况,当我们有一个Controller使用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同步公共资源的更好方法?考虑资源应该被延迟初始化。

感谢, 阿德里安

回答

0

有在玩,还是别人其中使用常规的servlet的servlet容器(Tomcat的等)延迟加载类(场)没有什么区别。你的代码与双重检查锁定应该可以正常工作。但我建议你避免双重检查锁定(即使它没有损坏),只需使你的方法同步即可。