黑马程序员一单例设计模式的饿汉式与懒汉式以及加锁的情况

来源:互联网 发布:联想淘宝旗舰店靠谱吗 编辑:程序博客网 时间:2024/05/26 14:09

------- <a href="http://www.itheima.com" target="blank">android培训</a>、<a href="http://www.itheima.com" target="blank">java培训</a>、期待与您交流! ----------


首先,我们以类Single为例,做一个单例设计模式

一个类在内存中只有一个对象,只操作一个对象,所以该类只会提供一个获得对象的方法,

返回值类型为类类型,返回的内容为对象



//同步函数被静态修饰后,用的锁synchronized是this
//静态进内存中,没有本类对象,但是有该类对应的字节码文件对象     类.class


饿汉式

所谓饿汉式,在代码块初始化的时候,就会生成一个对象,

并且向外提供一个公有的方法,直接返回太对象。

由于方法语句只有一句,所以不存在锁的情况

class Single

{
private Singel(){}
private static  Singel s=new Singel();
public static Singel getInstance()
{
return s;
}
}


懒汉式

所谓懒汉式,就是在初始化的时候并不给该类对象赋值属性,为null.

只用当调用该方法时,进行判断如果值为null,则新建一个内存对象赋值给该对象,返回该对象

否则则认为该对象以存在,返回原来的对象,确保对象的唯一性。


class Single

{

private static  Single s=null;

private Single(){}

public static  Single getInstance()
{
if(s==null)

s=new Single();
}
return s;
}
}


懒汉式的加锁情况

由于懒汉式为多行语句,所以在线程运行中可能会造成中断,生成多个对象的情况。

为了提高代码的高效性,所以进行了加锁以及双重判断的情况

第一重判断,为当不存在该对象时,则增加加锁代码块,保证代码块中语句不中断

第二重判断,如果对象值为null,新建这个对象,提高代码的高效性。

class Single

{
private static  Single s=null;
private Single(){}
public static  Single getInstance()
{
if(s==null)

synchronized(Single.class)

{

if(s==null)

s=new Single();
}
}
return s;
}
}
0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 跳舞之后浑身疼怎么办 事业编体检怀孕怎么办 辞职后报到证怎么办 学生早上起床困怎么办 延期毕业报到证怎么办 学校报到证丢失怎么办 生育险不满一年怎么办 产假结束上班宝宝怎么办 辞职后生育津贴怎么办 员工要不到工资怎么办 试用期不发工资怎么办 单位不给探亲假怎么办 工作5.5天周六怎么办 不爱运动的幼儿怎么办 总跟孩子生气怎么办 小孩经常感冒发烧怎么办 家里出现皮球虫怎么办 第一天教幼儿园怎么办 幼师遇到家长投诉怎么办 小孩喜欢玩手机怎么办 幼师掐孩子胳膊怎么办 孩子喜欢抓人怎么办 小孩顽皮不听教怎么办 出现了心理异常怎么办 想问下心理出问题该怎么办 大班幼儿爱说话怎么办 孩子不喜欢去幼儿园怎么办 别人抢宝宝玩具怎么办 新生儿抱淘气了怎么办 野兔子吃葵花怎么办 烫伤了怎么办安全反思 安全教案触电了怎么办 烫伤了怎么办儿歌导入 生病了怎么办教学反思 大班安全《烫伤了怎么办》 安全教案热了怎么办 身上有色素斑怎么办 脸上好多肝斑怎么办 眼角旁边长斑怎么办 鞋上贴纸也会黄怎么办 脸上长好多黄褐斑怎么办