写一个多线程下安全的java单例 并且再多线程的情况下用这个单例实现一个计数器
时间: 2023-11-17 09:13:16 浏览: 90
好的,首先我们来看一下如何实现一个多线程下安全的Java单例。
```java
public class Singleton {
private static volatile Singleton instance;
private Singleton() {}
public static Singleton getInstance() {
if (instance == null) {
synchronized (Singleton.class) {
if (instance == null) {
instance = new Singleton();
}
}
}
return instance;
}
}
```
上面的代码中,我们使用了双重检查锁定来确保在多线程情况下只创建一个实例。其中,volatile关键字可以保证instance变量在多线程情况下的可见性。
接下来,我们可以使用这个单例来实现一个计数器。
```java
public class Counter {
private int count;
private static volatile Counter instance;
private Counter() {}
public static Counter getInstance() {
if (instance == null) {
synchronized (Counter.class) {
if (instance == null) {
instance = new Counter();
}
}
}
return instance;
}
public synchronized int getCount() {
return count;
}
public synchronized void increment() {
count++;
}
}
```
上面的代码中,我们使用了synchronized关键字来保证在多线程情况下对计数器的操作是安全的。同时,我们也使用了双重检查锁定来保证只创建一个实例。
这样,我们就实现了一个多线程下安全的Java单例,并且用这个单例实现了一个计数器。
阅读全文