怎样写出一个线程安全的单例模式
<代码>包com.chendan.mianshi;/* * * * * @Description * @author ChenDan 624665255 @qq.com * @date 2019年8月4日下午8:47:13 * */公开课MianShiTest2 { 公共静态void main (String [] args) {//com.chendan.mianshi.SingleTon@1c53fd30//com.chendan.mianshi.SingleTon@1c53fd30//可以看到结果一样 getInstanceEhs ();//com.chendan.mianshi.SingleTon2@282ba1e//com.chendan.mianshi.SingleTon2@282ba1e getInstanceLhs ();//com.chendan.mianshi.SingleTon3@f5f2bb7//com.chendan.mianshi.SingleTon3@f5f2bb7 getInstanceLhs2 (); }//饿汉式方法 公共静态孔隙getInstanceEhs () {//调用GetInstance直接返回一个实例对象,且是唯一的 单例instance1=SingleTon.getInstance (); 单例instance2=SingleTon.getInstance ();//com.chendan.mianshi.SingleTon@1c53fd30 System.out.println (instance1);//com.chendan.mianshi.SingleTon@1c53fd30 System.out.println (instance2); }//懒汉式方法 公共静态孔隙getInstanceLhs () {//调用getInstance直接返回一个实例对象,且是唯一的 SingleTon2 instance1=SingleTon2.getInstance (); SingleTon2 instance2=SingleTon2.getInstance ();//ccom.chendan.mianshi.SingleTon2@cad498c System.out.println (instance1);//com.chendan.mianshi.SingleTon2@cad498c System.out.println (instance2); } 公共静态孔隙getInstanceLhs2 () {//调用getInstance直接返回一个实例对象,且是唯一的 SingleTon3 instance1=SingleTon3.getInstance (); SingleTon3 instance2=SingleTon3.getInstance ();//com.chendan.mianshi.SingleTon2@cad498c System.out.println (instance1);//com.chendan.mianshi.SingleTon2@cad498c System.out.println (instance2); } }//饿汉式直接初始化方法 单例类{ 私人单例(){ }//饿汉式直接静态初始化,保证唯一,但是初始类时就加载内存,性能稍低 私有静态单例实例=new SingleTon ();//创建直接返回线程方法 公共静态单例getInstance () { 返回实例; } }//懒汉式静态内部类初始化方法 类SingleTon2 { 私人SingleTon2 () { } 私有静态类Singleton2Holder { 最后公共静态SingleTon2实例=new SingleTon2 (); } 公共静态SingleTon2 getInstance () { 返回Singleton2Holder.instance; } } 类SingleTon3 { 私人SingleTon3 () { } 公共静态SingleTon3实例=零; 公共静态SingleTon3 getInstance () { 如果(实例==null) { 同步(SingleTon3.class) { 如果(实例==null) { 实例=new SingleTon3 (); } } } 返回实例; } }代码>
总结:最优方法为内部静态类的方法,即方法2