Java:代码同步

Paw*_*wan 2 java multithreading

我在下面有这段代码,如图所示.我们的应用程序在由Load Balancer控制的5个Web服务器上运行,所有这些服务器都连接到一个Memcache实例.

我猜这个同步化只适用于一个实例.

请告诉我如何在5个Web服务器尝试访问Memcache时同步这段代码

public class Memcache {
    private MemcachedClient memclient = null;  
    private static Memcache instance = null;

    public static Memcache getInstance() {
        if (instance == null) {
            try {
                synchronized (Memcache.class) {
                    instance = new Memcache();
                }
            } catch (IOException e) {
                throw new RuntimeException(e);
            }
        }
        return instance;
    }

    private Memcache() throws IOException {
        MemcachedClientBuilder builder = new XMemcachedClientBuilder();
        memclient = builder.build();

    }

}
Run Code Online (Sandbox Code Playgroud)

Yai*_*sky 6

为什么不这样初始化呢?

private static Memcache instance = new Memcache();
Run Code Online (Sandbox Code Playgroud)

裸记住,你试图实现在这里的同步是有问题的,
因为两个线程可以通过(如果(例如== NULL)(上下文切换可能是行之后),
那么你可以考虑双重检查模式,
但在一些版本的Java有一个与它的问题.
在我所提供的链接,有关于问题的信息,并
这个环节,你可以用volatile关键字了解辛格尔顿.

我仍然会选择上面提到的选项.