当前位置: 首页 > news >正文

网站建设知识文章wordpress添加友链申请

网站建设知识文章,wordpress添加友链申请,大连公交app,如何在线上推广产品单例模式可以分为两种:1.饿汉模式 2.懒汉模式 一.饿汉模式 //饿汉模式👇 class MySingleTon{//因为这是一个静态成员变量,在类加载的时候,就创建了private static MySingleTon mySingleTon new MySingleTon();//创建一个静…

单例模式可以分为两种:1.饿汉模式   2.懒汉模式


一.饿汉模式    

//饿汉模式👇
class MySingleTon{//因为这是一个静态成员变量,在类加载的时候,就创建了private static MySingleTon mySingleTon = new MySingleTon();//创建一个静态方法,方便在类外获取对象public static MySingleTon getMySingleTon() {return mySingleTon;}//创建一个私有的构造方法//避免通过new关键字来调用构造方法,进而创建实例//保证了唯一性private MySingleTon(){}}public class ThreadDemo8 {public static void main(String[] args) {MySingleTon s1 = MySingleTon.getMySingleTon();MySingleTon s2 = MySingleTon.getMySingleTon();System.out.println(s1 == s2);}}

程序运行的结果

结果是true,说明了这两次都是获取了同一个实例!,这也说明成功实现了单例模式


因为这个对象是在类加载的时候创建,类加载是单线程的,所以线程安全。但是如果在代码中,没有使用对象,就会造成资源浪费!


二.懒汉模式

这是实现懒汉模式的代码👇

class MySingleTonLazy{private static MySingleTonLazy mySingleTonLazy = null;public static MySingleTonLazy getMySingleTonLazy() {if(mySingleTonLazy != null){mySingleTonLazy = new MySingleTonLazy();}return mySingleTonLazy;}//私有的构造方法private MySingleTonLazy(){}
}public class ThreadDemo9 {public static void main(String[] args) {MySingleTonLazy s1 = MySingleTonLazy.getMySingleTonLazy();MySingleTonLazy s2 = MySingleTonLazy.getMySingleTonLazy();System.out.println(s1==s2);}
}

这个代码是有两个问题的:1.线程安全问题。2.指令重排序问题

1.线程安全问题

所以说,需要对其加锁。把这些指令打包成一个原子(整体),这样就不会出现这种情况了。


这是修改后的代码,是线程安全的!

第一个if是用来判断这个实例是否已经创建了,如果创建就直接跳过这个代码了。👆


2.指令重排序问题

mySingleTonLazy = new MySingleTonLazy()

这行代码在执行的时候,会分为3个步骤:

1.分配内存空间

2.初始化对象

3.将引用指向对象

这3个步骤可以是按132顺序执行,也可以是123顺序执行👇

如果是按132来执行的,先执行完1,然后执行3 ,在执行完3后,另一个线程也来执行,因为已经创建了对象,在if判断完后,直接跳过去了,但此时这个对象没有初始化,故而会有空指针问题


那么我们该如何解决这个问题👇

引入volatile关键字

1.防止内存可见性问题

2.解决指令重排序问题

此时这个volatile 解决指令重排序问题

 private volatile static MySingleTonLazy mySingleTonLazy = null;

那么这懒汉模式正确代码如下👇

class MySingleTonLazy {// 使用 volatile 修饰,保证可见性和禁止指令重排序private volatile static MySingleTonLazy mySingleTonLazy = null;private static Object locker = new Object();public static MySingleTonLazy getMySingleTonLazy() {// 第一次检查,判断实例是否已经创建if (mySingleTonLazy == null) {// 加锁,保证线程安全synchronized (locker) {// 第二次检查,防止多个线程同时通过第一次检查if (mySingleTonLazy == null) {mySingleTonLazy = new MySingleTonLazy();}}}return mySingleTonLazy;}// 私有的构造方法,防止外部实例化private MySingleTonLazy() {}
}public class ThreadDemo9 {public static void main(String[] args) {MySingleTonLazy s1 = MySingleTonLazy.getMySingleTonLazy();MySingleTonLazy s2 = MySingleTonLazy.getMySingleTonLazy();System.out.println(s1 == s2);}
}

总结:

线程安全:

饿汉模式:天生都线程安全,不用如何处理

懒汉模式:线程不安全,需要自己处理

资源利用率:

饿汉模式:那么创建出了这个实例,然后并没有使用这个实例,这就造成了资源浪费的情况

懒汉模式:用的时候,创建实例,避免不必要的资源浪费的情况

http://www.dtcms.com/a/531696.html

相关文章:

  • 没有网站怎么做cps申请永久网站空间
  • 做网站设计比较好的公司wordpress学院
  • 毕业设计网站开发任务安排做网站大概要多
  • 用国外服务器做违法网站wordpress如何缩短连接
  • 游戏网站免费入口西城网站建设浩森宇特
  • 设计网站首页要几天网站开发都用什么浏览器
  • 胶州哪家公司做网站wordpress全装美恰
  • 济宁市住房和城乡建设局网站提高网站知名度
  • 网站建设公司logo无印良品vi设计分析
  • 做网站爬闪山东省工程建设招标信息网站
  • 哪个网站可以做推手青岛市公共资源交易网
  • php学建网站工作室 网站 备案
  • 做网站发房源综合语录电子商务网站建设与维护实训报告
  • 临沂做网站推广的公司哪家好建网站吧
  • 建网站服务器是什么东西wordpress不能发文章_只能在标题内写字
  • phpcms v9网站模板搜索网站排名软件
  • 陕西网站建设哪家好杭州网站建设很棒
  • 永宝网站建设招聘信息网络营销推广方案
  • 专业做财经直播网站有哪些企业网站建设 属于什么费用
  • 什么是指定网站的域名青海微网站建设
  • 连州住房建设局网站南城网站建设公司方案
  • 广告位网站建设ps模板网站
  • 达建网站的需要永久免费域名申请教程
  • 苏州建站公司认准苏州聚尚网络php毕业设计代做网站
  • 建设商务网站广州购物网站建设报价
  • seo怎么做网站排名大泽山seo快速排名
  • 网站制作与防护费用聊城做网站低费用
  • 网站备案密码收不到郫都区网站建设
  • wordpress数据库结构百度seo排名培训 优化
  • 横沥网站仿做开封+网站建设+网络推广