单例模式的写法
全程干货
所有需要注意的点都在代码注释中有写,文章不多赘述。
Mgr1.java
package com.DP.singleton;
public class Mgr1 {
public static final Mgr1 INSTANCE=new Mgr1();
private Mgr1(){};
public static Mgr1 getInstance(){
return INSTANCE;
}
public static void main(String[] args) {
Mgr1 m1=Mgr1.getInstance();
Mgr1 m2=Mgr1.getInstance();
System.out.println(m1==m2);
}
}
Mgr2.java
package com.DP.singleton;
public class Mgr2 {
public static final Mgr2 INSTANCE;
static {
INSTANCE=new Mgr2();
}
private Mgr2(){};
public static Mgr2 getINSTANCE() {
return INSTANCE;
}
public static void main(String[] args) {
Mgr2 m1=Mgr2.getINSTANCE();
Mgr2 m2=Mgr2.getINSTANCE();
System.out.println(m1==m2);
}
}
Mgr3.java
package com.DP.singleton;
public class Mgr3 {
private static Mgr3 INSTANCE;
private Mgr3(){}
public static Mgr3 getINSTANCE() {
if(INSTANCE==null){
try {
Thread.sleep(10);
} catch (InterruptedException e) {
e.printStackTrace();
}
INSTANCE=new Mgr3();
}
return INSTANCE;
}
public static void main(String[] args) {
for (int i = 0; i < 100;i++) {
new Thread(()-> System.out.println(Mgr3.getINSTANCE().hashCode())).start();
}
}
Mgr4.java
package com.DP.singleton;
public class Mgr4 {
private static Mgr4 INSTANCE;
private Mgr4() {
}
public static synchronized Mgr4 getINSTANCE() {
if (INSTANCE == null) {
try {
Thread.sleep(10);
} catch (InterruptedException e) {
e.printStackTrace();
}
INSTANCE = new Mgr4();
}
return INSTANCE;
}
public static void main(String[] args) {
for (int i = 0; i < 100; i++) {
new Thread(() -> System.out.println(Mgr4.getINSTANCE().hashCode())).start();
}
}
}
Mgr5.java
package com.DP.singleton;
public class Mgr5 {
private static Mgr5 INSTANCE;
private Mgr5() {
}
public static Mgr5 getINSTANCE() {
if (INSTANCE == null) {
synchronized (Mgr5.class) {
try {
Thread.sleep(10);
} catch (InterruptedException e) {
e.printStackTrace();
}
INSTANCE = new Mgr5();
}
}
return INSTANCE;
}
public static void main(String[] args) {
for (int i = 0; i < 100; i++) {
new Thread(() -> System.out.println(Mgr5.getINSTANCE().hashCode())).start();
}
}
}
Mgr6.java
package com.DP.singleton;
public class Mgr6 {
private static volatile Mgr6 INSTANCE;
private Mgr6() {
}
public static synchronized Mgr6 getINSTANCE() {
if (INSTANCE == null) {
synchronized (Mgr6.class) {
if (INSTANCE == null){
try {
Thread.sleep(10);
} catch (InterruptedException e) {
e.printStackTrace();
}
INSTANCE = new Mgr6();
}
}
}
return INSTANCE;
}
public static void main(String[] args) {
for (int i = 0; i < 100; i++) {
new Thread(() -> System.out.println(Mgr6.getINSTANCE().hashCode())).start();
}
}
}
Mgr7.java
package com.DP.singleton;
public class Mgr7 {
private Mgr7() {
}
private static class Mgr7Holder {
public static final Mgr7 INSTANCE = new Mgr7();
}
public static Mgr7 getINSTANCE() {
return Mgr7Holder.INSTANCE;
}
public static void main(String[] args) {
for (int i = 0; i < 100; i++) {
new Thread(() -> System.out.println(Mgr7.getINSTANCE().hashCode())).start();
}
}
}
Mgr8.java
package com.DP.singleton;
public enum Mgr8 {
INSTANCE;
private void m(){}
public static void main(String[] args) {
for (int i = 0; i < 100; i++) {
new Thread(() -> System.out.println(Mgr8.INSTANCE.hashCode())).start();
}
}
}