java mysql 单例模式_Java设计模式--单例模式

在企业应用开发当中为了解决多次创建重复对象而造成空间的极度浪费这时候Java设计模式--单例模式起到了举足轻重的作用,下面由我带领大家认识Java中常见的设计模式---单例模式附带小案例最简单的单例模式

package com.tarena.prictve;

public class MySingleton { private static MySingleton mySingleton;

public MySingleton() { } public static MySingleton getmySingleton(){ if(mySingleton==null){  mySingleton=new MySingleton(); } return mySingleton; }}

该设计案例有个不好的地方在多线程的环境中会创建多个单例对象,而且会出现许多问题

这时我们可以使用线程同步锁synchronized来实现确保线程安全 见代码

package com.tarena.prictve;

public class MySingleton { private static MySingleton mySingleton;

public MySingleton() {   } public static synchronized MySingleton getmySingleton(){ if(mySingleton==null){  mySingleton=new MySingleton(); } return mySingleton; } }

2.类加载时创建单例模式这样就不需要同步了在类加载后就创建了对象

package com.tarena.prictve;

public class MySingleton { private final static MySingleton mySingleton=new MySingleton();

public MySingleton() {   } public static MySingleton getmySingleton(){  return mySingleton; } }

3.采用延时加载的方式来加载(静态方法在构造方法之前执行)

package com.tarena.prictve;

public class MySingleton { private  static MySingleton mySingleton=null; static{  mySingleton=new MySingleton(); }

private MySingleton() { } public static MySingleton getmySingleton(){  return mySingleton; } }

4.双层检测锁实现方式 但是还是不理想当开发者通过反射修改修饰符为public就又会出创建单例

package com.tarena.prictve;

public class MySingleton { private  volatile MySingleton mySingleton=null;  private MySingleton() {   } public  MySingleton getmySingleton(){   if(mySingleton==null){    synchronized(MySingleton.class){     if(mySingleton==null){      mySingleton=new MySingleton();     }    }   } return mySingleton; } }

5.通过枚举来实现(流行)

package com.tarena.prictve;

public enum MySingleton { INSTANCE; public void doSomeInstring(){   }}//测试MySingleton mse=new MySingleton();mse.INSTANCE;//获得实例//获得引用你就可以调用它的任何方法mse.doSomeInstring();

//说明:枚举的好处,枚举本身就是单例的可以,不必担心对象同步的问题,避免了初始化等问题

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值