1、常见单例模式(不可被继承,构造方法已被私有)
(1)懒汉式
(2)饿汉式(在类的初始化时,已经自行实例化)
2、懒汉式
//懒汉式,在第一次调用时实例化
public class Singleton{
private static Singleton instance = null;
private Singleton(){}
public static Singleton getInstance() {
if(instance == null){
instance = new Singleton();
}
return instance;
}
}
3、饿汉式
public class Singleton {
private static Singleton instance = new Singleton();
private Singleton(){}
public static Singleton getInstance() {
return insatnce;
}
}
4、双检锁
public class Singleton {
private volatile static Singleton instance;
private Singleton() {}
public static Singleton getInstnce() {
if(instance == null) {
synchronized(Singleton.class) {
if(instance == null) {
instance = new Singleton();
}
}
}
return instance;
}
}
5、sychronized(this)和synchronized(class)区别
(1)一个是对象锁一个是类锁
(2)
- 对象锁:在 Java 中,每个对象都会有一个 monitor 对象,这个对象其实就是 Java 对象的锁,通常会被称为“内置锁”或“对象锁”。类的对象可以有多个,所以每个对象有其独立的对象锁,互不干扰。
- 类锁: 在 Java 中,针对每个类也有一个锁,可以称为“类锁”,类锁实际上是通过对象锁实现的,即类的 Class 对象锁。每个类只有一个 Class 对象,所以每个类只有一个类锁。