首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Java :代码同步

Java :代码同步
EN

Stack Overflow用户
提问于 2012-11-01 15:02:03
回答 1查看 137关注 0票数 2

如下所示,我有这段代码。我们的应用程序运行在由负载均衡器控制的5个web服务器上,所有服务器都连接到一个Memcache实例。

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

当5个web服务器试图访问Memcache时,请让我知道如何同步这段代码。

代码语言:javascript
运行
复制
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();

    }

}
EN

回答 1

Stack Overflow用户

发布于 2012-11-01 16:18:12

您可以使用延迟初始化的ClassHolder模式实现对类的同步访问。因为Memcache是用静态初始化器初始化的,所以它不需要更多的同步构造。任何线程对getInstance()的第一次调用都会导致MemcacheHolder被加载、缓存和初始化,并使Memcache实例对调用代码可用。

代码语言:javascript
运行
复制
public class MemcacheFactory{

  private static class MemcacheHolder {
        public static Memcache instance = new Memcache();
    }

    public static Memcache getInstance() {
        return MemcacheFactory.MemcacheHolder.instance;
    }

}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13172434

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档