JAVA单例模式(线程安全,高并发性能又高)
利用锁的原理,来比较一下四种单例模式。
第一种:线程不安全,不正确

1 class Singleton {
2
3 private static Singleton instance;
4
5 private Singleton() {
6
7 }
8
9 public static Singleton getInstance() {
10
11 if (instance == null) {
12
13 instance = new Singleton();
14 }
15
16 return instance;
17 }
18 }

第二种:线程安全,但是高并发性能不是很高

1 class Singleton {
2
3 private static Singleton instance;
4
5 private Singleton() {
6
7 }
8
9 public static synchronized Singleton getInstance() {
10
11 if (instance == null) {
12
13 instance = new Singleton();
14 }
15
16 return instance;
17 }
18 }

第三种:线程安全,性能又高,这种写法最常见。

1 class Singleton {
2
3 private static Singleton instance;
4 private static byte[] lock = new byte[0];
5
6 private Singleton() {
7
8 }
9
10 public static Singleton getInstance() {
11
12 if (instance == null) {
13
14 synchronized (lock) {
15 instance = new Singleton();
16 }
17 }
18
19 return instance;
20 }
21 }

第四种:线程安全,性能又高,这种写法也最为常见。

1 class Singleton {
2
3 private static Singleton instance;
4 private static ReentrantLock lock = new ReentrantLock();
5
6 private Singleton() {
7
8 }
9
10 public static Singleton getInstance() {
11
12 if (instance == null) {
13
14 lock.lock();
15 if (instance == null) {
16 instance = new Singleton();
17 }
18 lock.unlock();
19 }
20
21 return instance;
22 }
23 }

本文详细解析了JAVA中四种不同的单例模式实现,包括线程不安全、线程安全但性能较低、线程安全且高性能的两种实现方式,对比了它们在并发场景下的表现。
2740

被折叠的 条评论
为什么被折叠?



