如下所示,我有这段代码。我们的应用程序运行在由负载均衡器控制的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();
}
}
发布于 2012-11-01 08:18:12
您可以使用延迟初始化的ClassHolder模式实现对类的同步访问。因为Memcache是用静态初始化器初始化的,所以它不需要更多的同步构造。任何线程对getInstance()的第一次调用都会导致MemcacheHolder被加载、缓存和初始化,并使Memcache实例对调用代码可用。
public class MemcacheFactory{
private static class MemcacheHolder {
public static Memcache instance = new Memcache();
}
public static Memcache getInstance() {
return MemcacheFactory.MemcacheHolder.instance;
}
}
https://stackoverflow.com/questions/13172434
复制