1. 单例模式
饿汉式
饿汉式 1
package ink.yql.singleton02;
// 饿汉式 单例模式之一
public class User01 {
// 静态变量,只有一个
private static User01 user = new User01();
private User01() {
}
public static User01 getInsetnes() {
return user;
}
}
饿汉式 2
package ink.yql.singleton02;
//饿汉式单例模式之一
public class User02 {
// 静态变量,只有一个
private static User02 user;
static {
user = new User02();
}
private User02() {
}
public static User02 getInsetnes() {
return user;
}
}
懒汉式
懒汉式 1
package ink.yql.singleton02;
//懒汉式 单例模式之一
public class User03 {
// 静态变量,只有一个
private static User03 user;
private User03() {
}
//线程不安全
public static User03 getInsetnes() {
if (user ==null) {
user = new User03();
}
return user;
}
}
懒汉式 2
package ink.yql.singleton02;
//懒汉式 单例模式之一
public class User04 {
// 静态变量,只有一个
private static User04 user;
private User04() {
}
public static User04 getInsetnes() {
if (user ==null) {
//线程不安全
synchronized(User04.class) {
user = new User04();
}
}
return user;
}
}
懒汉式 3
package ink.yql.singleton02;
//懒汉式 单例模式之一
public class User05 {
// 静态变量,只有一个
private static User05 user;
private User05() {
}
//线程安全,效率太慢了
public synchronized static User05 getInsetnes() {
if (user ==null) {
user = new User05();
}
return user;
}
}
懒汉式4
package ink.yql.singleton02;
//懒汉式 单例模式之一
public class User06 {
// 静态变量,只有一个
private volatile static User06 user;
private User06() {
}
//线程安全,效率高 建议使用
public static User06 getInsetnes() {
if (user ==null) {
synchronized(User06.class) {
if(user == null) {
user = new User06();
}
}
}
return user;
}
}
懒汉式5
package ink.yql.singleton02;
//懒汉式 单例模式之一
public class User07 {
// 静态变量,只有一个
private User07() {
}
// 静态内部类,保证线程安全,效率高
private static class Insetnes{
private static final User07 USER= new User07();
}
//线程安全,效率高 建议使用
public static User07 getInsetnes() {
return Insetnes.USER;
}
}
懒汉式6
package ink.yql.singleton02;
//懒汉式 单例模式之一
public enum User08 {
user;
}