标签:
*懒汉式:(多线程高并发访问时要考虑同步问题) >代码,以用户实体为例(User) publiuc class User{ /*1. 用户实体,静态全局依赖,类加载时即初始化为空指针,没有内存地址,但还 *是可以引用 */ private static User instance=null; //2. 私有的构造函数,外部不能有以new关键字在堆内存中新创建的对象 private User(){} //懒汉式,懒加载实例化的对象 public static synchronized User getInstace(){ //如果实例化对象为空指针 if(!instancre){ //实例化当前对象 instance=new User(); return instance; }else{ //否则返回当前实例化的对象 return instance; } } } *饿汉式: >代码,以用户实体为例(User): public class User{ //类加载即初始化user对象,饿汉式,饥饿加载, private static User instance=new User(); //供外部访问接口,得到供外部访问的实例化对象 public static User getInstance(){ return instance; } //私有构造函数,模拟数据库 private User(){ } } 注:单例模式,只应许有一个类的实例,所以构造函数是私有的。 *懒汉是不是在类加载时初始化类的实例化对象,不能保证对象的唯一性,所以在多线程的情况下尽管有 实例对象空值的判断,也会产生线程安全的问题,因为多线程是按照时间片来运行线程的,破坏类代码 的垂直执行的顺序,因此加上同步关键字synchronized,是代码块同步,线程安全。 *饿汉式因为是在类加载的时候实例化静态类对象,因此无论何时都只有一个静态的全局依赖类对象, 不会有线程的安全问题。
标签:
原文地址:http://www.cnblogs.com/liaowanzhong/p/4781191.html