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

拼图式网站开发福州网络推广

拼图式网站开发,福州网络推广,宁津县建设局网站,外贸网站seo怎么做单例模式是设计模式之一 设计模式,就像古代打仗,我们都听过孙子兵法,把计谋概括下来弄成一种模式,形成一种套路。 软件开发中也有很多场景,多数类似的问题场景,解决方案就形成固定的模式,单例…

单例模式是设计模式之一

设计模式,就像古代打仗,我们都听过孙子兵法,把计谋概括下来弄成一种模式,形成一种套路。

软件开发中也有很多场景,多数类似的问题场景,解决方案就形成固定的模式,单例模式就是其中一种

单例模式就是保证在某个类中只存在唯一一份实例,不会创建出多个实例

单例模式实现方式有很多,最常见的就是饿汉与懒汉两种模式,区别就是创建实例的时机不同

饿汉模式

饿汉模式是在类加载的时候创建

class Singleton{private static Singleton singleton=new Singleton();private Singleton(){}public static Singleton GetInstance(){return singleton;}
}

写一个具体的示例来看:

public class ThreadDemo1 {public static void main(String[] args) throws InterruptedException {Thread[] thread=new Thread[10];for(int i=0;i<5;i++){thread[i]=new Thread(()->{System.out.println(Singleton.GetInstance());});thread[i].start();}for (int i = 0; i < 5; i++) {thread[i].join();}}
}
class Singleton{private static Singleton singleton=new Singleton();private Singleton(){}public static Singleton GetInstance(){return singleton;}
}

根据运行结果我们能看到不同线程都是同一个实例 

懒汉模式

懒汉模式是在第一次使用的时候创建实例

单线程

class Singleton{private static Singleton instance=null;private Singleton (){}public static Singleton GetInstance(){if(instance==null) instance=new Singleton();return instance;}
}

多线程

在多线程情况下再使用单线程的懒汉模式是可能会出现线程不安全的,如果多个线程同时调用GetInstance 方法,可能就会出现多个实例

例如:

public class ThreadDemo2 {public static void main(String[] args) throws InterruptedException {Thread[] thread=new Thread[40];for(int i=0;i<40;i++){thread[i]=new Thread(()->{System.out.println(Singleton.GetInstance());});thread[i].start();}for(int i=0;i<40;i++){thread[i].join();}}
}
class Singleton{private static Singleton instance=null;private Singleton (){}public static Singleton GetInstance(){if(instance==null) instance=new Singleton();return instance;}
}

 在GetInstance 方法中加一个 synchronized 就能解决问题

public class ThreadDemo2 {public static void main(String[] args) throws InterruptedException {Thread[] thread=new Thread[40];for(int i=0;i<40;i++){thread[i]=new Thread(()->{System.out.println(Singleton.GetInstance());});thread[i].start();}for(int i=0;i<40;i++){thread[i].join();}}
}
class Singleton{private static Singleton instance=null;private Singleton (){}public static synchronized Singleton GetInstance(){if(instance==null) instance=new Singleton();return instance;}
}
 改进

加 synchronized 关键字确实解决了出现多个实例的问题,但是加锁与解锁是开销比较大的事,这里出现的线程不安全只发生在第一次创建实例时,在经过第一次创建实例后,后面就不需要加锁了

因此我们可以再加一个 if 判断一下

在给 instance 变量加上 volatile 关键字避免出现内存可见性的线程不安全

public class ThreadDemo2 {public static void main(String[] args) throws InterruptedException {Thread[] thread=new Thread[40];for(int i=0;i<40;i++){thread[i]=new Thread(()->{System.out.println(Singleton.GetInstance());});thread[i].start();}for(int i=0;i<40;i++){thread[i].join();}}
}
class Singleton{private static volatile Singleton instance=null;private Singleton (){}public static Singleton GetInstance(){if(instance==null){synchronized (Singleton.class){if(instance==null) instance=new Singleton();}}return instance;}
}

在 thread[1] 刚判断是否为空以后,thread[2] 也调用此方法并执行完,再执行thread[1] 后续加锁操作,这样也会创建多个实例


文章转载自:

http://kVSxoHpX.mgfnt.cn
http://kxRiz6rC.mgfnt.cn
http://DHO5FJfp.mgfnt.cn
http://EbFJsesn.mgfnt.cn
http://2ydaxEcb.mgfnt.cn
http://EuV7L9Vi.mgfnt.cn
http://bJqB5XTA.mgfnt.cn
http://CHrf5A42.mgfnt.cn
http://NX7gbMNq.mgfnt.cn
http://mwxwB2Bb.mgfnt.cn
http://HT3wUbE0.mgfnt.cn
http://g4k9yugU.mgfnt.cn
http://GkZxVlwL.mgfnt.cn
http://CTdbgOiW.mgfnt.cn
http://pvdb7734.mgfnt.cn
http://HZkTt3x1.mgfnt.cn
http://uLVB674F.mgfnt.cn
http://Bfquz26v.mgfnt.cn
http://Y8HqJf7K.mgfnt.cn
http://iruoRPc1.mgfnt.cn
http://yHs9jyIg.mgfnt.cn
http://sEVPWF3I.mgfnt.cn
http://WjXe73vu.mgfnt.cn
http://Yumeo27t.mgfnt.cn
http://4v8aXqVy.mgfnt.cn
http://Y7MsAHzd.mgfnt.cn
http://KM0NIaGs.mgfnt.cn
http://aD6aVV4w.mgfnt.cn
http://Nq7vR5Q7.mgfnt.cn
http://2K6We7py.mgfnt.cn
http://www.dtcms.com/wzjs/652667.html

相关文章:

  • 设计网站的目的校园网设计方案
  • 谷歌网站推广网上最畅销的10种商品
  • 重庆网站建设营销网站建设重点
  • 有哪些中文域名网站网站开发工程师就业前景
  • 网站建设与网页设计从入门到精通 pdf图片库网站建设
  • 河南怎么样做网站wordpress仿seowhy模板
  • 网站控制面板中设置目录权限增城专业建站公司
  • 厦门市市场开发建设服务中心网站智慧团建入口
  • 微信网站怎么做的好名字吗做网站记什么科目
  • 手机网站开发成本聊城手机网站公司电话
  • 手机能创建网站吗做米业的企业网站
  • 营销型网站建设课程培训现场wordpress 焦点图插件
  • 在网站做商城平台需要哪些资质加强网站制度建设
  • 门户网站宣传方案一个网站开发的假设
  • 重养网站建设建设厅网站的无法打印
  • 邹平县建设局官方网站单页简洁手机网站模板
  • 无锡市住房与城乡建设网站校园网站建设开题报告
  • 郑州网站建设公司linux做网站优势
  • 南宁经典网站建设建筑公司做网站的好处
  • 沈阳网站建设21anshanwordpress列表显示标签
  • 深圳建网站技术网站开发需要什么软件
  • 邯郸手机网站建设服务网站建设推广注册公司
  • 充值网站源码php平台的运营推广怎么做
  • 东莞网站建设 喷砂机北京网站建设联系电话
  • 做彩铃网站东莞百度seo地址
  • 铁总建设函网站兰州装修公司前十名
  • 一个网站的后台怎么做wordpress 图片采集器
  • 美丽乡村建设网站php源码saas平台是干嘛的
  • 张家港网站建设培训班wordpress阅读器
  • wordpress后台加站点图标旅游政务网站建设方案