单例模式有饿汉时模式和懒汉式;单例模式也就是说同一类只返回一个对象供外部类使用;懒汉式即延迟初始化单例。在多线程环境下,简单的懒汉式会有线程安全。
懒汉式单例模式解决线性安全问题如下:
(1) 使用双重检查锁机制解决线程安全问题。
(2) 单例模式还有更好的解决方案,即使用静态类方式。
懒汉式单例模式典型代码:
public class SingleTonDemo {
/**
* 单例模式---懒汉式 by caiwencai201907013
*/
public static void main(String[] args) {
SingleTom.getInstance();//类名.方法名即可调用
}
}
class SingleTom{
private static SingleTom singleTom=null;
//1.写构造方法来创建对象,必须是私有的,使得外部类不能访问,因为构造方法多次被调用就会产生多个对象。
private SingleTom() {
System.out.println("单例模式");
}
//2.对外提供一个公有的静态方法供外部调用,静态方法是属于类而不是属于对象,所以直接用类名.方法名即可调用
public static SingleTom getInstance(){
if(singleTom==null){
singleTom=new SingleTom();//调用构造方法创建对象
}
return singleTom;
}
}