标签:object print volatil 检查 产生 void bsp 包括 用法
懒汉模式:在类加载的时候不被初始化。
饿汉模式:在类加载时就完成了初始化,但是加载比较慢,获取对象比较快。
饿汉模式是线程安全的,在类创建好一个静态对象提供给系统使用,懒汉模式在创建对象时不加上synchronized,会导致对象的访问不是线程安全的。
public class Singleton { /** * 双重锁校验机制 * */ /*private static volatile Singleton instance=null; private Singleton() { System.out.println("产生一个学习委员"); } public static synchronized Singleton getInstance() { if (instance==null){ instance=new Singleton(); }else { System.out.println("已经有一个学习委员,不能产生新的学习委员"); } return instance; } public static void setInstance(Singleton instance) { Singleton.instance = instance; } public void getName(){ System.out.println("我是学习委员:李远远"); }*/ /** * 懒汉 线程不安全 */ /*private static Singleton instance; public Singleton() { System.out.println("产生一个学习委员"); } public static Singleton getInstance() { if(instance==null){ instance=new Singleton(); }else { System.out.println("已经有一个学习委员,不能产生新的学习委员"); } return instance; } public void getName(){ System.out.println("我是学习委员:李远远"); }*/ /** * 懒汉 线程安全 */ /*private static Singleton instance; public Singleton() { System.out.println("产生一个学习委员"); } public static synchronized Singleton getInstance() { if(instance==null){ instance=new Singleton(); }else { System.out.println("已经有一个学习委员,不能产生新的学习委员"); } return instance; } public void getName(){ System.out.println("我是学习委员:李远远"); }*/ /** * 饿汉 */ /* private static Singleton instance=new Singleton(); public Singleton() { System.out.println("产生一个学习委员"); } public static Singleton getInstance() { if(instance==null){ return instance; }else { System.out.println("已经有一个学习委员,不能产生新的学习委员"); return instance; } } public void getName(){ System.out.println("我是学习委员:李远远"); }*/ /** * 饿汉的 变异版 */ /*private static Singleton instance=null; static { instance=new Singleton(); } public static Singleton getInstance() { if(instance==null){ return instance; }else { System.out.println("已经有一个学习委员,不能产生新的学习委员"); return instance; } } public void getName(){ System.out.println("我是学习委员:李远远"); }*/ /** * 内部静态类 */ private static class SingletonHolder{ private static final Singleton instance=new Singleton(); } public Singleton() { System.out.println("产生一个学习委员"); } public static final Singleton getInstance() { if(SingletonHolder.instance==null){ return SingletonHolder.instance; }else { System.out.println("已经有一个学习委员,不能产生新的学习委员"); return SingletonHolder.instance; } } public void getName(){ System.out.println("我是学习委员:李远远"); } } public class Driver { public static void main(String[] args) { Singleton singleton=Singleton.getInstance(); singleton.getName(); System.out.println("*****************************"); Singleton singleton1=Singleton.getInstance(); singleton1.getName(); if(singleton==singleton1){ System.out.println("same"); }else { System.out.println("not same"); } } }
标签:object print volatil 检查 产生 void bsp 包括 用法
原文地址:https://www.cnblogs.com/caiyu5/p/9710596.html