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

自己做网站教学视频/seo网站关键词优化工具

自己做网站教学视频,seo网站关键词优化工具,网站建设 策划方案,织梦响应式网站单例模式是一种比较常用且相对简单的设计模式,首先我们来明确什么是单例模式,顾名思义“单例”就是单个实例,也就是说“在我们的系统中某个类只能存在一个对象实例,并且这个对象实例是私有的并且不能通过外部new()的方式创建这个对…

        单例模式是一种比较常用且相对简单的设计模式,首先我们来明确什么是单例模式,顾名思义“单例”就是单个实例,也就是说“在我们的系统中某个类只能存在一个对象实例,并且这个对象实例是私有的并且不能通过外部new()的方式创建这个对象,内部需要提供一个公共方法去取到这个对象实例”。

        接下来我们看作用,单例到底有什么用它的存在意义是什么呢?我们知道单例只有一个实例,在某些业务中这样可以避免不同实例之间的冲突,以及减少内存的浪费,例如在一个资源监控组件中对同一个资源的多个监控器可能会造成显示差异以及内存浪费。

       实现一个单例模式在于我们设计的代码必须保证只能有一个对象:

             1、首先我们需要私有化该类的构造方法防止外部创建对象,对象的创建权只能掌握在该类中。

             2、然后我们在这个类中创建一个私有化的静态对象。

             3、最后我们提供外可以访问这个对象的公共静态方法。

       然后我们来看实现,单例模式的实现主要分为两种模式“懒汉式”以及“饿汉式”,他们的主要区别在于实例的创建时机下面我们来详细讨论。

1、饿汉式单例模式

        饿汉式单例模式下对象实例是这个类加载时去创建这个对象实例,之后需要使用这个对象通过提供的公共方法去获取这个已经创建好的对象,我们来看下面一段代码

public class SingletonHungry {private static final SingletonHungry singleton=new SingletonHungry();private SingletonHungry(){} //私有化构造器防止外部创建对象public static SingletonHungry getInstance(){return singleton;}
}

        这就是一个饿汉式单例模式的简单实现,我们可以看到其中包含了一个私有的静态常量实例,一个将默认构造器重写为私有的构造器,以及一个获取实例的公共方法。下面我们来测试它。

class Main{public static void main(String[] args) {SingletonHungry instance0 = SingletonHungry.getInstance();SingletonHungry instance1 = SingletonHungry.getInstance();if (instance0==instance1){System.out.println("我们指向同一个实例");}}
}

          

       我们可以看到instance0;instance0两个引用确实指向了同一个实例

       由于是在类加载阶段创建对象,所以这种方法的好处在于所以不存在线程同步问题,缺点在于有很多情况会造成类的加载,可能会造成内存的浪费。

2、懒汉式单例模式

       懒汉式单例模式在于实例是在使用时去创建,实现了懒加载避免可能出现的内存浪费,我们来看下面一段代码。

2.1同步方法

public class SingletonLazy {private static SingletonLazy singletonLazy;private SingletonLazy(){}public synchronized static SingletonLazy getInstance(){if(singletonLazy==null){singletonLazy=new SingletonLazy();}return singletonLazy;}
}

       这是懒汉式单例模式的一种实现,我们在getInstance方法中创建实例避免了可能出现的内存浪费,并且加入synchronized解决了多线程下的线程安全为题,但是这种方法每次调用getInstance方法都会执行同步逻辑,这样就大大降低了程序的效率所以有了下面的方法。

2.2双重检查(推荐使用)

       对于上面的方法我们可以采用双重检查的方式来降低同步方法对效率的影响,我们来看下面代码。

public class SingletonLazy {private static volatile SingletonLazy singletonLazy;private SingletonLazy(){}public static SingletonLazy getInstance(){if(singletonLazy==null){synchronized (SingletonLazy.class){if (singletonLazy==null){singletonLazy=new SingletonLazy();}}}return singletonLazy;}
}

       我们可以看到我们将同步加在了代码块中对这个类进行同步,这样就避免了每次调用方法都会执行同步逻辑。并且我们在创建对象前进行了两次对实例的判断,一次在同步前,一次在同步后。这样当还没有创建实例时,如果有两个线程同时执行这个方法的话,就会使两个线程排队执行,第一个线程执行完毕后第二个线程在执行同步代码块中的逻辑遇到判断直接返回,避免了线程不安全;当这个实例已经创建时,其他线程再来执行这个方法就会在第一个判断之后直接返回不进行同步代码块的执行,解决了效率问题,并且加入了轻量化的volatile修饰对象实例保证了线程间对该对象的可见性,每次对该对象进行修改时可立刻将更新刷入主存。

2.3补充

       回到2.1如果我们去掉方法上的synchronized会怎样呢,我们看下面一段代码

public class SingletonLazy{private static SingletonLazy singletonLazy;private SingletonLazy(){}public static SingletonLazy getInstance() throws InterruptedException {if(singletonLazy==null){System.out.println("啊我睡了");Thread.sleep(200);singletonLazy=new SingletonLazy();}return singletonLazy;}
}
class Creater implements Runnable{SingletonLazy instance;@Overridepublic void run() {try {instance = SingletonLazy.getInstance();} catch (InterruptedException e) {e.printStackTrace();}}public SingletonLazy getIt(){return instance;}}
class Use{public static void main(String[] args) throws InterruptedException {Creater creater0=new Creater();Creater creater1=new Creater();Thread thread0=new Thread(creater0,"A");Thread thread1=new Thread(creater1,"B");thread0.start();thread1.start();Thread.sleep(300);if (creater0.instance==creater1.instance){System.out.println("我们指向同一实例");}else {System.out.println("我们不一样~");}}
}

        

      结果显然是不对的,这样就不能保证线程安全了,这个类也就不是单例类了。

http://www.jmfq.cn/news/4816297.html

相关文章:

  • 购物网站模块例子/网站快速排名
  • 海口网站建设工作/关键词快速排名怎么做
  • 合优网络科技有限公司/莱阳seo外包
  • 动态网站开发教程pdf/google搜索入口
  • 最权威的做网站优化价格/西安百度快照优化
  • 钱宝网站怎么做任务/南昌seo排名
  • 东湖南昌网站建设公司/百度信息流是什么
  • 郑州小程序开发报价/泰州网站排名seo
  • html常用软件/上海aso苹果关键词优化
  • 越秀五屏网站建设/学生个人网页制作成品
  • 网站源代码下载工具/百度舆情监测平台
  • 模仿一个网站建设多少钱/免费域名注册平台有哪些
  • 做网站的需求/百度快照收录
  • 免费网站建设c3sales/企业网站推广优化
  • 乔柘云智能建站/找客户的十大方法
  • 福州做网站的公司有哪些/广东企业网站seo哪里好
  • 做游戏视频网站用什么程序好/品牌关键词优化哪家便宜
  • wap建站工具/湛江seo
  • 做的网站在百度上搜不出来的/国外域名注册网站
  • 高德地图可以看国外吗/google seo是什么
  • 贵阳网站建设费用/企业建站都有什么网站
  • 哈尔滨最好的网站建设公司/企业文化宣传策划方案
  • 厦门网站建设开发公司/windows优化大师的特点
  • 企业网站开发与设计论文/澎湃新闻
  • 达人室内设计网官网入口/优化设计五年级下册数学答案
  • 食品网站建设方案/微信引流推广怎么找平台
  • 域名怎么绑定自己网站/兰州正规seo整站优化
  • 怎样做下载网站/seo外包如何
  • 什么学做网站/制作网站的公司有哪些
  • 制作h5的基本流程/阳山网站seo