19-Spring_Patterns-1

1.关于设计模式的一些小知识

这个blog是在学完所有的设计模式以后写的,目前正在学jvm

我们会发现,其实有很多框架,或者很多技术,都是通过反射这个技术来实现的

反射技术是可以做很多事,关于zookeeper,springcloud,等暂时先了解,等后续jvm弄完了,就可以直接看spring了

2.单例

单例singleton用的非常的多,在实际项目中,比如你的配置信息,或者用户信息,都只有一份(前端中),当时写android的时候,就用到了单例,那个时候直接就是在init的时候加载了,这里主要说一下几种单例模式:

     1.枚举

枚举就是创建固定对应的数据,这些数据只创建一次,本质就是若干组数据单例

这里枚举并不难,在写到HTTP_200;HTTP_500这种代码的时候,可以用枚举
enum HttpEnum{

HTTP_200(200,"返回成功"){
this.httpCode = httpCode;
this.httpMsg = httpMsg;
}

private Integer httpCode;
private String httpMsg;

public Integer gethttpCode{
    return httpCode;
}

public String gethttpMsg{
    return httpMsg;
}

这里举了一个枚举的小小例子,到时候用的时候再写,记得更深一些.

     2.饿汉式,在初始化的时候,就把那一份单例创建出来了,所以之后哪怕开多线程,也是线程安全的,因为直接用就行了,不涉及到创建

     3.懒汉式,在要用到的时候才创建,所以肯定是有线程安全问题的

     4.双重检验锁

上一篇blog有提到,

先判断对象是否已经被初始化,再决定要不要加锁

这里涉及到2个双重检验锁,正确错误与否,跟编译器重排序有关
这里的错误双重检验锁,居然跟从排序有关,A线程正在初始化对象的
时候,B线程因为检测到单例不为空,对其进行访问,但是此时
对象还没有初始化完成

正确的做法是在单例对象前面加volatile ,避免重排序

但是这个尽量不要用,其实技术有很多,但是总会有一些最好的技术,是用的最多的,你要做的就是知道,然后拿来用就行了,做应用级的时候,入门的时候,知其然可以节省时间,提高效率

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值