设计模式笔记-单例模式

来源:互联网 发布:网络用语lay了什么意思 编辑:程序博客网 时间:2024/06/05 00:47
单例模式主要分两种:饿汉模式和懒汉模式。
饿汉模式例子:
public class HungrySingle {        private static HungrySingle  single = new HungrySingle();               private HungrySingle() {                     }               public static HungrySingle getInstance() {               return single ;       }        public static void main(String[] args) {              HungrySingle single = getInstance ();       }}

懒汉模式例子:
public class LazySingle {        public static LazySingle  single = null;               private LazySingle() {                     }               public static LazySingle getInstance() {               if (single == null) {                      single = new LazySingle();              }               return single ;       }        public static void main(String[] args) {              LazySingle single = getInstance ();       }}


饿汉模式和懒汉模式的区别在于单例加载的时间不同,对于饿汉模式来说,线程是安全的,对于懒汉模式,则是不安全的。
为了实现线程安全,可以再懒汉模式的getInstance加上同步约束synchronized.但是如果这样的话,每次取一个实例都需要进去同步机制,那并发线程多的时候,速度显然收影响。
所以有个双检测锁机制的懒汉模式。
双检测锁机制的懒汉模式例子:
public class DoubleLockLazySingle {        public static DoubleLockLazySingle single = null;               private DoubleLockLazySingle () {                     }               public static DoubleLockLazySingle getInstance() {               if (single == null) {                 synchronized(DoubleLockLazySingle.class) {                    if (single == null) {                        single = new DoubleLockLazySingle();                    }                 }              }              return single;       }        public static void main(String[] args) {        DoubleLockLazySingle single = getInstance ();       }}


双检测锁机制可以实现lazey loading,又可以实现线程同步,应该算是比较好的单例模式。


单例模式应用在log4j,数据库连接池等。


0 0
原创粉丝点击