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

端午节网站怎么做南京seo排名收费

端午节网站怎么做,南京seo排名收费,hyperapp wordpress,随州网站建设哪家实惠单例模式是设计模式之一 设计模式,就像古代打仗,我们都听过孙子兵法,把计谋概括下来弄成一种模式,形成一种套路。 软件开发中也有很多场景,多数类似的问题场景,解决方案就形成固定的模式,单例…

单例模式是设计模式之一

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

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

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

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

饿汉模式

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

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://www.dtcms.com/wzjs/273610.html

相关文章:

  • 义乌做网站的公司seo推广编辑
  • 网站辅助导航深圳推广公司哪家好
  • 网络营销就是建立企业网站平谷头条新闻
  • 全影网的网站哪儿做d网络营销的宏观环境
  • 什么网站可以查建设用地规划许可证竞价托管公司
  • 某高校门户网站开发案例河南网站建设优化技术
  • 荆州松滋网站建设广告位招商怎么找客户
  • 如何建设诗词网站seo快速排名百度首页
  • 做淘宝客需要企业网站吗网络优化工程师有前途吗
  • 政府建设网站企业关键词优化最新报价
  • 网站浮窗代码百中搜优化
  • 做网站和做系统的区别厦门seo网站推广
  • wordpress信用卡收款重庆seo排名电话
  • 沈阳网站建设哪家公司好百度seo和sem
  • 公司网站建设公外贸推广优化公司
  • 河南省建设科技网站seo优化专员编辑
  • 网站续费服务商公司网站制作公司
  • 慈云寺网站建设软件外包公司有哪些
  • 做机械设计图纸找什么网站友妙招链接
  • 网站首页图片怎么做cps推广平台有哪些
  • 网站备案 国外域名网络营销成功案例分析其成功原因
  • 公司免费网站模板江阴网站制作公司
  • 培训视频网站优化公司流程制度
  • 网站留言板怎么做phpsql网络营销主要做什么
  • 路由器做映射后 内网可以访问到我的网站 但是外网无法访问百度手机助手app下载
  • 怎么给网站加代码推广公司是做什么的
  • 国外化工产品b2b网站ks免费刷粉网站推广
  • 神华公司两学一做网站营销策略包括哪些方面
  • 什么网站发布任务有人做seo优化技术排名
  • 群晖做自己的电影网站安年软文网