单例模式中,饿汉式 懒汉式和懒汉式有什么区别?各适合用在哪里

单例模式中的懒汉式和饿汉式有什么区别?_java吧_百度贴吧
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&签到排名:今日本吧第个签到,本吧因你更精彩,明天继续来努力!
本吧签到人数:0成为超级会员,使用一键签到本月漏签0次!成为超级会员,赠送8张补签卡连续签到:天&&累计签到:天超级会员单次开通12个月以上,赠送连续签到卡3张
关注:594,926贴子:
单例模式中的懒汉式和饿汉式有什么区别?收藏
网上看了一些文章,也看了一些评论,结论有些不一致,请了解的朋友帮忙解答一下
上海java培训,选达内,美国上市教育机构,「java培训之父」Sun认证,先就业后付款!达内java培训,名师授课,0基础120天速成java工程师,0元试学!学习+认证+就业=薪前景!
同求科普!
那就花点钱买本好书把- -
懒汉式----&在需要对象实例的时候才new饿汉式----&类载入的时候就new好实例了
登录百度帐号推荐应用
为兴趣而生,贴吧更懂你。或1425人阅读
单例模式是我们在开发过程中使用最多的一种设计模式。单例模式定义与作用就是保证整个程序中某个实例有且只有一个。我们都知道创造实例是通过构造方法来实现的,只要有构造方法,就可以创建实例。
一、单例模式构建原理分析:
我们平时在开发过程中经常会创建多个实例,那是因为在我们new class中
public class Starving {
&//这个位置存在一个默认的构造方法,只要有这个默认构造方法,就可以创造多个实例
而我们单例模式只允许获取一个实例,那怎么办呢?
&1.修改默认的构造方法
&2.我们把默认的构造方法设置为私有的
&3.一旦创建为私有的,那么外界就无法通过构造方法创建实例,就避免创建多个实例
&新的问题就来了,单例模式要保证至少而且只有一个实例,而外部无法创建?
&1.自己创建一个实例,自己可以调用我们自己私有的构造方法来创建一个类的实例
&& 例如:Starving instance = new Starving();
&2.创建实例以后,我们怎么把这个实例提供给外部呢?
&& 一般我们要获取成员通过对象.的形式获取,而现在外部根本无法去获取这个对象
&& static Starving instance = new Starving();
&& 通过static变为类的成员,我们就可以通过类名的方式去访问这个成员。
&& Starving star1 = Starving. //这种方式获取实例
&& Starving star2 = Starving. //这种方式获取实例
&& 提供一个用于获取实例的方法
&&& //需要注意的是,我们这个方法属于对象,不是类方法
&&& public Starving getInstance(){
&&& 那么我们可以把他变为私有的静态成员类方法
&&& public static Starving getInstance(){
&&& 所以,外部就可以以这种方式访问到
&&& Starving star = Starving.getInstance();
二、创建单例模式
创建单例有两种模式,一种是饿汉模式,一种是懒汉模式,具体代码如下:
&* 单例模式& 饿汉模式
&* @author &wpda
&* 应用场合:只需要一个就足够了
&* 作用:保证整个程序中某个实例有且只有一个
& public class Starving {
& //1.将构造方法私有化,不允许外部直接创建对象
& private Starving(){
& //2.创建类的唯一实例
& private static Starving instance = new Starving();
& //提供一个用于获取实例的方法
& //需要注意的是,我们这个方法属于对象,不是类方法
& //public Starving getInstance(){
& //3.提供一个用于获取实例的私有的类的静态成员方法
& public static Starving getInstance(){
&* 懒汉模式
&* @author Administrator
public class Lazy {
& //将构造方法私有化,不循序外部直接创建对象
& private Lazy(){
& //2.声明类的唯一实例
& private static L
& //3.提供一个用于获取实例的方法
& public static Lazy getInstance(){
&& &if(instance == null){
&& &&& instance = new Lazy();
三、总结与区别:
&&&&&&& 饿汉模式的特点是加载类时比较慢,但运行时获取对象的速度比较快,线程安全。饿汉式是线程安全的,在类创建的同时就已经创建好一个静态的对象供系统使用,以后不在改变。懒汉模式的特点是加载类时比较快,但是在运行时获取对象的速度比较慢,线程不安全, 懒汉式如果在创建实例对象时不加上synchronized则会导致对象的访问不是线程安全的。所以在此推荐大家使用饿汉模式。
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:3265次
排名:千里之外- System Error
Discuz! System Error
已经将此出错信息详细记录, 由此给您带来的访问不便我们深感歉意. 上传我的文档
 下载
 收藏
该文档贡献者很忙,什么也没留下。
 下载此文档
正在努力加载中...
设计模式--单例模式(一)懒汉式和饿汉式
下载积分:30
内容提示:设计模式--单例模式(一)懒汉式和饿汉式
文档格式:PDF|
浏览次数:239|
上传日期: 03:11:04|
文档星级:
该用户还上传了这些文档
设计模式--单例模式(一)懒汉式和饿汉式
官方公共微信设计模式中饿汉式单例类和懒汉式单例类
单例模式的特点为:
*单例类只有一个实例。
*单例类必须自己创建自己的唯一实例。
*单例类必须给所有其他对象提供这一实例。
饿汉式单例类:
而饿汉式单例类则在java语言中是最为简单的单例类,这是一个描述饿汉式单例类的类图的实现。
此类图中,此类已经将自己实例化。
public class EagerSingleton {
private static EagerSingleton instance=new EagerSingleton();
* 私有的默认构造子
public EagerSingleton(){}
* 静态工厂方法
public static EagerSingleton getInstance(){
可以看出,在这个类被加载时,静态变量instance已经实例化,此时类的私有构造方法就会被调用,这时,
单例类的唯一实例对象就被创建出来。
在单例类中一个最重要的特点就是类的构造方法是私有的,因此,该类无法被继承。
懒汉式单例类:
与饿汉式单例类相同之处是类的构造方法是私有的,与饿汉式单例类不同的是,懒汉式单例类,在第一次被引用时将自己实例化,
如下图所示,uml类图中给出了一个典型的懒汉式单例类实现。
懒汉式的源码为:
public class LazySingleton {
private static LazySingleton instance=
* 私有的构造函数,保证外界无法实例化
private LazySingleton(){}
* 静态工厂方法,返回此类的唯一实例
public synchronized static LazySingleton getInstance(){
if(instance==null){
instance=new LazySingleton();
饿汉式单例类和懒汉式单例类,饿汉式单例类在自己被加载时就将自己实例化,即便加载器是静态的,
在饿汉式单例类被加载时仍会将自己实例化,单从资源利用效率角度来讲,这个比懒汉式单例类稍差些。
但从速度和反应时间角度来讲,则比懒汉式单例类稍好些,然而,懒汉式单例类在实例化时,必须要处理好
在多个线程同时首次引用此类时的访问限制问题,特别是当单例类作为资源控制器在实例化必然涉及资源初始化,
而资源初始化可能会很费时间,这意味着出现多线程同时引用此类的几率变得较大。
(window.slotbydup=window.slotbydup || []).push({
id: '2467140',
container: s,
size: '1000,90',
display: 'inlay-fix'
(window.slotbydup=window.slotbydup || []).push({
id: '2467141',
container: s,
size: '1000,90',
display: 'inlay-fix'
(window.slotbydup=window.slotbydup || []).push({
id: '2467142',
container: s,
size: '1000,90',
display: 'inlay-fix'
(window.slotbydup=window.slotbydup || []).push({
id: '2467143',
container: s,
size: '1000,90',
display: 'inlay-fix'
(window.slotbydup=window.slotbydup || []).push({
id: '2467148',
container: s,
size: '1000,90',
display: 'inlay-fix'

我要回帖

更多关于 懒汉和饿汉 的文章

 

随机推荐