Java - Web应用程序中的线程同步

Kyl*_*yle 1 java multithreading java-ee

我有一个网络应用程序,我懒洋洋地加载组件.这里有很多

static Bla bla;
...    
if(bla == null) 
    bla = new Bla();
Run Code Online (Sandbox Code Playgroud)

遍布整个代码.我需要做些什么来确保这是线程安全的?我是否应该随时换行,我在synchronized块中执行其中一个初始化?这样做有什么问题吗?

che*_*vim 5

对于静态字段上的延迟加载的最佳解决方案,如Effective Java [第2版,第71项,p.283]和实践中的Java并发 [p.348],是按需初始化成语的惯用语:

public class Something {
    private Something() {
    }

    private static class LazyHolder {
        private static final Something something = new Something();
    }

    public static Something getInstance() {
        return LazyHolder.something;
    }
}
Run Code Online (Sandbox Code Playgroud)