菜鸟成长日记:Java基础篇3 --- 单例模式

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了菜鸟成长日记:Java基础篇3 --- 单例模式相关的知识,希望对你有一定的参考价值。

单例模式分为懒汉式和饿汉式,以下是两者的比较:

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 }

 

以上是关于菜鸟成长日记:Java基础篇3 --- 单例模式的主要内容,如果未能解决你的问题,请参考以下文章

菜鸟成长日记:Java基础篇8 --- 内部类

菜鸟成长日记:Java基础篇2 --- 动态参数类型

菜鸟的linux成长日记-bash基础特性2

Java进阶篇设计模式之一 ----- 单例模式

Java进阶篇设计模式之一 ----- 单例模式

JAVA_多线程_单例模式