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)
为什么不这样初始化呢?
private static Memcache instance = new Memcache();
Run Code Online (Sandbox Code Playgroud)
裸记住,你试图实现在这里的同步是有问题的,
因为两个线程可以通过(如果(例如== NULL)(上下文切换可能是行之后),
那么你可以考虑双重检查模式,
但在一些版本的Java有一个与它的问题.
在我所提供的链接,有关于问题的信息,并
在这个环节,你可以用volatile关键字了解辛格尔顿.
我仍然会选择上面提到的选项.
| 归档时间: |
|
| 查看次数: |
136 次 |
| 最近记录: |