博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
单例模式
阅读量:5231 次
发布时间:2019-06-14

本文共 1448 字,大约阅读时间需要 4 分钟。

 

什么是单例模式

  单例模式,是一种常用的软件设计模式。在它的核心结构中只包含一个被称为单例的特殊类。通过单例模式可以保证系统中,应用该模式的类一个类只有一个实例。即一个类只有一个对象实例。

 

单例模式的设计思路:

  1.将构造函数私有化,保证类外部不能使用new关键字自行创建对象

  2.在类内部实例化一个对象并通过 静态方法返回

 

单例模式的实现方式:

  1.饿汉式单例模式

 

 

class Singleton{      private Singleton(){                System.out.println("单例模式");    }    private static  Singlleton single=new Singlleton();    Public static  Singleton  getInstance(){      return singleton;  }       }

 

缺点:在一加载的时候就实例化,提前占用系统资源

优点:线程安全

 

  2.懒汉式单例模式  synchronized

 

 

class  Singleton{    private static Singleton  single=null;    public static synchronized Singleton getInstance(){    if(singleton==null){    //只在null的时候实例化        singleton=new Singleton();    }    return singleton;  }}

 

优点:解决了饿汉模式一加载就占用资源的问题

缺点:线程不安全。每次都需要锁住方法,只允许一个线程访问,效率低下

synchronized:将一个方法或代码块锁住,同一时间只允许一个代码访问

 

 

 

  3.双重加锁的懒汉模式

 

class Singleton{    private static Singleton=null;    public static synchronized   Singleton getInstance(){    if(singleton==null){        synchronized(Singleton.class){
//锁住那个类的对象 if(singleton==null){ singleton=new Singleton(); } } } return singleton; }}

 

 

 

只有当第一次singleton为null的时候,才进行线程锁

当后续singleton不为null时,可以允许多个线程同时拿走singleton

 

 

  4.静态内部类实现单例

 

private static class Singleton1{    private static Singleton singleton=new Singleton();}public static Singleton getInstance(){    return Singleton1.singleton;}

 

解决了饿汉式提前占用资源的问题,解决了懒汉式线程不安全的问题

 

转载于:https://www.cnblogs.com/1960366876tZ/p/8909738.html

你可能感兴趣的文章