-
Notifications
You must be signed in to change notification settings - Fork 1
/
No2.java
152 lines (126 loc) · 3.17 KB
/
No2.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
package offer;
/**
* 单例模式
*
* */
public class No2 {
/**
* 单例模式,懒汉式,线程安全
*/
public static class SingleTon{
private final static SingleTon INSTANCE = new SingleTon();
private SingleTon(){
}
public static SingleTon getInstance(){
return INSTANCE;
}
}
/**
* 单例模式,饿汉式,线程不安全
*/
public static class SingleTon2{
private static SingleTon2 INSTANCE = null;
private SingleTon2(){
}
public static SingleTon2 getInstance(){
if(INSTANCE == null){
INSTANCE = new SingleTon2();
}
return INSTANCE;
}
}
/**
* 单例模式,饿汉式,线程安全,多线程环境下效率不高
*/
public static class SingleTon3{
private static SingleTon3 INSTANCE = null;
private SingleTon3(){
}
public static synchronized SingleTon3 getInstance(){
if(INSTANCE == null){
INSTANCE = new SingleTon3();
}
return INSTANCE;
}
}
/**
* 单例模式,饿汉式,另一种加锁方式
*/
public static class SingleTon4{
private static SingleTon4 INSTANCE = null;
private SingleTon4(){
}
public static SingleTon4 getInstance(){
if(INSTANCE == null){
synchronized(SingleTon4.class){
if(INSTANCE == null){
INSTANCE = new SingleTon4();
}
}
}
return INSTANCE;
}
}
/**
* 单例模式,饿汉式,变种,线程安全
*/
public static class SingleTon5{
private static SingleTon5 INSTANCE = null;
static{
INSTANCE = new SingleTon5();
}
private SingleTon5(){
}
public static SingleTon5 getInstance(){
return INSTANCE;
}
}
/**
* 单例模式,懒汉式,使用静态内部类,线程安全【推荐】
*/
public static class SingleTon6{
private final static class SingleTonHolder{
private static SingleTon6 INSTANCE = new SingleTon6();
}
private SingleTon6(){
}
public static SingleTon6 getInstance(){
return SingleTonHolder.INSTANCE;
}
}
/**
* 单例模式,静态内部类,使用枚举方式,线程安全【推荐】
*/
public enum SingleTon7{
INSTANCE;
public void whateverMethod(){
}
}
/**
* 单例模式,静态内部类,使用双重校验锁,线程安全【推荐】
*/
public static class SingleTon8{
private volatile static SingleTon8 INSTANCE = null;
private SingleTon8(){}
public static SingleTon8 getInstance(){
if(INSTANCE == null){
synchronized(SingleTon8.class){
if(INSTANCE == null){
INSTANCE = new SingleTon8();
}
}
}
return INSTANCE;
}
}
public static void main(String[] args) {
System.out.println(SingleTon.getInstance() == SingleTon.INSTANCE);
System.out.println(SingleTon2.getInstance() == SingleTon2.getInstance());
System.out.println(SingleTon3.getInstance() == SingleTon3.getInstance());
System.out.println(SingleTon4.getInstance() == SingleTon4.getInstance());
System.out.println(SingleTon5.getInstance() == SingleTon5.getInstance());
System.out.println(SingleTon6.getInstance() == SingleTon6.getInstance());
System.out.println(SingleTon7.INSTANCE == SingleTon7.INSTANCE);
System.out.println(SingleTon8.getInstance() == SingleTon8.getInstance());
}
}