单例模式分为懒汉式和饿汉式,以下是两者的比较:
1、 饿汉式立即加载,在类加载时就创建了一个对象,供外部使用。
懒汉式延迟加载,在被调用时才创建对象。
2、 根据上面的特性可以知道:
饿汉式是线程安全的,懒汉式会导致对对象的访问不是线程安全的,此时应注意使用
Synchronized关键字。
3、 两者各有优点同时也各有问题,懒汉式延迟加载提高效率,饿汉式线程安全。
在效率和安全之间要根据业务权衡
下面是工作中遇到实例,是一个cache实例:
第一个懒汉式
1 /** 2 * 玩家开服嘉年华礼包 3 * @author wangchong 4 * @date 2017年8月25日 上午10:51:31 5 */ 6 public class PlayerInitialActivityCache extends PlayerTimeIdleCache<PlayerInitialActivity> { 7 8 private static final PlayerInitialActivityCache instance = new PlayerInitialActivityCache(); 9 10 private PlayerInitialActivityCache() { 11 super(true, DateTimeUtil.MINUTE * 10); 12 } 13 14 public static PlayerInitialActivityCache getInstance() { 15 return instance; 16 } 17 }
下面的饿汉式只是演示的需要临时改的,真正使用时不推荐
1 /** 2 * 玩家开服嘉年华礼包 3 * @author wangchong 4 * @date 2017年8月25日 上午10:51:31 5 */ 6 public class PlayerInitialActivityCache extends PlayerTimeIdleCache<PlayerInitialActivity> { 7 8 private static PlayerInitialActivityCache instance = null; 9 10 private PlayerInitialActivityCache() { 11 super(true, DateTimeUtil.MINUTE * 10); 12 } 13 14 public static PlayerInitialActivityCache getInstance() { 15 if (instance == null) { 16 instance = new PlayerInitialActivityCache(); 17 } 18 return instance; 19 } 20 }
时间: 2024-10-10 20:03:12