java写出一个单例模式,JAVA中单例模式

  java写出一个单例模式,JAVA中单例模式

  单一模式是Java中最简单的设计模式之一。这种类型的设计模式属于创造性模式,它提供了创建对象的最佳方式。

  如何解决写爬虫IP受阻的问题?立即使用。

  这种模式涉及一个单独的类,它负责创建自己的对象,同时确保只创建一个对象。该类提供了访问其唯一对象的方法,可以直接访问该对象,而无需实例化该类的对象。

  注意:

  1.单例类只能有一个实例。2.singleton类必须创建自己唯一的实例。3.singleton类必须向所有其他对象提供这个实例。

  java 单例模式5种写法:

  1、饱汉模式(懒汉模式)

  //满汉

  //非线程安全

  公共类Singleton1 {

  私有静态Singleton1 singleton=null

  私有Singleton1() {

  }

  公共静态Singleton1 getInstance() {

  if (singleton==null) {

  singleton=new singleton 1();

  }

  返回单例;

  }

  }优点:懒加载启动快,占用资源少,使用时才实例化,无锁。

  缺点:非线程安全。

  2、饱汉模式(懒汉模式)--线程安全

  公共类Singleton {

  /**

  *定义一个变量来存储创建的类实例。

  */

  私有静态Singleton uniqueInstance=null

  /**

  *将构造方法私有化,以便控制内部创建的实例数量。

  */

  私有Singleton(){

  }

  /**

  *定义一个方法为客户端提供一个类实例

  * @返回Singleton的实例

  */

  公共静态同步单例getInstance(){

  //确定存储实例的变量是否有值。

  if(uniqueInstance==null){

  //如果没有,则创建一个类实例,并将值赋给存储该类实例的变量。

  unique instance=new Singleton();

  }

  //如果有值,那么直接使用它

  返回uniqueInstance

  }

  /**

  *示意方法,单个实例可以有自己的操作。

  */

  public void singleton operation(){

  //函数处理

  }

  /**

  *原理图属性,单线图可以有自己的属性。

  */

  私有字符串singletonData

  /**

  * schematic方法,让外界通过这些方法访问属性值。

  * @返回属性的值

  */

  公共字符串getSingletonData(){

  返回singletonData

  }

  }优点:同上,但是锁定。

  缺点:synchronized是一个独占的排他锁,并发性能差。即使在创建成功之后,获取实例仍然是一个序列化操作。

   3、饱汉模式(懒汉模式)--双重加锁检查DCL(Double Check Lock)

  公共类Singleton {

  /**

  *向保存实例的变量添加可变修饰。

  */

  private volatile static Singleton实例=null

  私有Singleton(){

  }

  公共静态Singleton getInstance(){

  //先检查实例是否存在,如果不存在,则进入下面的同步块。

  if(instance==null){

  //同步块,创建线程安全的实例

  synchronized(Singleton.class){

  //再次检查该实例是否存在,如果不存在,则创建它。

  if(instance==null){

  instance=new Singleton();

  }

  }

  }

  返回实例;

  }

  }优点:懒加载和线程安全。

  注意:实例必须用volatile关键字修饰,这保证了完整的初始化。

  4、饿汉模式

  公共类Singleton {

  //4:定义一个静态变量来存储创建的类实例。

  //在这里直接创建类实例,只创建一次

  私有静态Singleton实例=new Singleton();

  //1:私有化构造方法,从而控制内部创建的实例数量。

  私有Singleton(){

  }

  //2:定义一个方法,为客户端提供一个类实例。

  //3:这个方法需要定义为类方法,也就是要添加static。

  //此方法中不需要控件代码。

  公共静态Singleton getInstance(){

  //5:直接使用创建的实例。

  返回实例;

  }

  }优点:饿中文模式天生线程安全,使用时没有延迟。

  缺点:启动时创建实例,启动慢可能造成资源浪费。

  5、Holder模式

  公共类Singleton {

  /**

  *类级内部类,即静态成员类型内部类、内部类的实例和外部类的实例。

  *没有绑定关系,只有被调用时才会加载,实现延迟加载。

  */

  私有静态类SingletonHolder{

  /**

  *静态初始化器,由JVM保证线程安全。

  */

  私有静态Singleton实例=new Singleton();

  }

  /**

  *私有化建设方法

  */

  私有Singleton(){

  }

  公共静态Singleton getInstance(){

  返回SingletonHolder.instance

  }

  }优点:一种将惰性加载和线程安全(无锁)完美结合的方式。(推荐)

  以上是如何编写java singleton模式的细节。更多请关注我们的其他相关文章!

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: