`
zhangyuanjava
  • 浏览: 129515 次
  • 性别: Icon_minigender_1
  • 来自: 河北
社区版块
存档分类
最新评论

你的java单例安全吗

阅读更多
今天在写一个东西需要用的单例模式,一般的单列模式可分为以下两种:

1 饿汉式:
  public class Singleton{
  private static Singleton singleton = new Singleton ();
  private Singleton (){}
  public Singleton getInstance(){return singletion;}
  } 

2  懒汉式:
  public class Singleton{
  private static Singleton singleton = null;
  public static  Singleton getInstance(){
  if(singleton==null){
  singleton = new Singleton();
  }
  return singleton;
  }
  } 

  安全分析:

  1 从线程角度:



    从线程角度看,我们会发现,饿汉式是线程安全的,在类创建的同时就已经创建好一个静态的对象供系统使用,以后不在改变,懒汉式如果在创建实例对象时不加上synchronized则会导致对对象的访问不是线程安全的,所以在使用懒汉式时我们的考虑到线程安全问题



改进后的懒汉式:

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



2 从安全角度:

ok,线程安全我们解决了,但是对于有些对系统的安全要求再高些的那,比如:操作系统的权限,

提醒下,在享有特权的客户可以借助AccessibleObject.setAccessible方法,通过反射机制来调用你的私有构造器。如果你的系统需要的安全级别比较高的话,为了抵御这用攻击,可以修改构造器,让它在被要求创建第二个实例的时候抛出异常。



3 从序列化角度:

我有时候会用到序列化,那怎样保证单例模式的安全?难道就仅仅在声明中加上”implements Serializable“就可以?这不够的,为了保证单列,我们还得声明所有实例域都是瞬时的,并提供一个readResolve方法,否则我们每次反序列化一个序列化的实例时,都会创建一个新实例,针对需要序列化的,我们可以加上这个方法:



private Object readResolve(){

  return singleton;

}



这只是我所想到和看到的,当然有不足之处还请大家多指教!

分享到:
评论

相关推荐

    java单例模式实例

    在Java中,有多种实现单例模式的方法,每种都有其特点和适用场景。接下来,我们将深入探讨这些实现方式。 首先,我们来看**懒汉式(Lazy Initialization)**。这种实现方式是在类被首次请求时才创建单例对象,延迟...

    Java 单例模式 工具类

    Java中的单例模式是一种常用的软件设计模式,它保证一个类只有一个实例,并提供全局访问点。在Java编程中,单例模式常用于控制资源的访问,比如数据库连接池、线程池或者日志对象等。本篇文章将深入探讨如何在Java中...

    Java 单例模式.pptx

    ### Java 单例模式详解 #### 一、什么是单例模式? 单例模式是一种常用的软件设计模式,在这种模式中,一个类只能拥有一个实例,并且该类必须自行创建并提供这个实例。通常,单例模式用于确保某个类在整个应用程序...

    Java单例模式设计

    Java单例模式是一种常用的设计模式,它保证一个类只有一个实例,并提供全局访问点。这种模式在需要频繁创建和销毁对象的场景中,或者当对象昂贵时(如数据库连接),能够节省系统资源,提高效率。本篇文章将深入探讨...

    Java中懒汉单例设计模式线程安全测试

    Java中懒汉单例设计模式线程安全测试,单例设计模式的测试

    使用Java单例模式实现一个简单的日志记录器.txt

    ### 使用Java单例模式实现一个简单的日志记录器 #### 一、单例模式简介 单例模式是一种常用的软件设计模式,在该模式中,一个类只能创建一个实例,并且提供了一个全局访问点来访问该实例。单例模式的主要优点包括...

    Java 单例模式线程安全问题

    Java 单例模式线程安全问题详解 Java 单例模式线程安全问题是指在 Java 中实现单例模式时,如何确保线程安全的问题。单例模式是指在整个应用程序生命周期中,只有一个实例存在的设计模式。这种模式可以提高性能,...

    JAVA单例模式的几种实现方法

    ### JAVA单例模式的几种实现方法 #### 一、饿汉式单例模式 饿汉式单例模式是在类初始化时就已经完成了实例化的操作。这种模式下,类一旦被加载,就会创建一个单例对象。 ##### 代码示例: ```java class ...

    java单例模式的例子

    Java单例模式是一种常见的设计模式,它在软件工程中用于控制类的实例化过程,确保一个类只有一个实例,并提供一个全局访问点。这种模式在系统资源管理、缓存、日志记录等方面应用广泛。下面我们将深入探讨Java单例...

    Java实现多种单例模式

    在Java编程中,单例模式是一种常用的软件设计模式,它保证一个类只有一个实例,并提供一个全局访问点。这种模式在需要频繁创建和销毁对象的场景中尤其有用,因为它可以节省系统资源并确保对象间的协调一致。以下是...

    Java单例类

    Java单例类详解 Java单例类是一种常见的设计模式,具有三个特点:单例类只能有一个实例、单例类必须自己创建自己的唯一实例、单例类必须给所有其他对象提供这一实例。单例模式可以分为三种:懒汉子式单例、饿汉子式...

    Java单例模式与工厂模式简单示例代码

    在Java中,单例模式的实现通常有几种方法: 1. **饿汉式(静态常量)**:在类加载时就完成初始化,所以类加载比较慢,但获取对象的速度快,且线程安全。 ```java public class Singleton { private static final ...

    Java单例模式深入理解

    Java单例模式是一种设计模式,它允许...以上就是关于Java单例模式的深入理解和常见实现方式,希望对你理解单例模式有所帮助。在实际开发中,灵活运用并结合具体场景选择合适的单例模式将有助于提高代码质量和可维护性。

    java单例模式连接数据库源码

    Java单例模式是一种设计模式,它保证一个类只有一个实例,并提供一个全局访问点。在数据库连接管理中,使用单例模式能有效控制资源,避免频繁创建和关闭数据库连接导致的性能损失和资源浪费。以下是对Java单例模式...

    java单例模式及实现

    Java单例模式及实现 Java单例模式是一种常见的设计模式,确保某一个类只有一个实例,而且向这个系统提供这个实例。单例模式可以分为三种:懒汉式单例、饿汉式单例、登记式单例。 单例模式的要点 1. 某个类只能有...

    java单例模式代码实例

    Java单例模式是一种常用的设计模式,它用于保证一个类只有一个实例,并提供全局访问点。这种模式在系统资源有限或者需要共享昂贵对象时尤其有用,比如数据库连接池、线程池等。下面我们将深入探讨Java单例模式的实现...

Global site tag (gtag.js) - Google Analytics