今天在写一个东西需要用的单例模式,一般的单列模式可分为以下两种:
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;
}
这只是我所想到和看到的,当然有不足之处还请大家多指教!
分享到:
相关推荐
线程安全的单例模式在多线程环境下尤其重要,因为不正确的实现可能导致多个线程创建多个实例,这违反了单例模式的基本原则。C++11引入了新的特性,如std::mutex和std::call_once,使得实现线程安全的单例模式变得...
单例模式是软件设计模式中的一种经典模式,它保证了类只有一个实例存在,并提供一个全局访问点。在Java等面向对象编程语言中,单例模式常用于管理共享资源,如数据库连接池、线程池或者配置文件等。结合工厂模式,...
单例模式是软件设计模式中的一种,它保证一个类只有一个实例,并提供一个全局访问点。在C#中,单例模式常用于管理共享资源或控制类的实例化过程,以提高性能、节约系统资源,特别是在整个应用程序生命周期内只需要一...
单例模式是软件设计模式中的一种经典模式,用于确保一个类只有一个实例,并提供一个全局访问点。在Java中,有多种实现单例模式的方法,每种都有其特点和适用场景。接下来,我们将深入探讨这些实现方式。 首先,我们...
### 线程安全的单例模式详解 #### 一、单例模式简介 单例模式(Singleton Pattern)是软件开发中最常用的创建型设计模式之一,它的主要目标是确保一个类只有一个实例,并提供一个全局访问点。单例模式在很多场景下...
**设计模式——单例模式** 在软件工程中,设计模式是一种在特定场景下解决常见问题的标准方案,可以被复用并提升代码质量。单例模式是设计模式中的一种,它保证一个类只有一个实例,并提供一个全局访问点。这种模式...
单例模式是软件设计模式中的一种经典模式,其主要目的是确保一个类只有一个实例,并提供一个全局访问点。这种模式在很多场景下非常有用,比如控制共享资源、管理配置对象等。下面将详细介绍七种常见的单例模式实现...
Java中懒汉单例设计模式线程安全测试,单例设计模式的测试
使用"懒汉模式"与"饿汉模式"实现c++的单例模式,并且确保了单例模式的第一次实例化的线程安全,以及程序结束时,单例对象的资源收回,以防内存资源的泄漏
在Java中,实现单例模式有多种方式,但最常见的问题是线程安全问题。例如,上述代码展示了一个简单的单例实现,称为"饿汉式"单例,因为无论是否需要,它都会在类加载时立即创建实例。这种方式虽然简单,但在多线程...
单例模式是软件设计模式中的一种,它的主要目的是确保一个类只有一个实例,并提供一个全局访问点。这种模式在很多场景下都非常有用,比如控制资源的唯一性、管理共享配置或者创建昂贵的对象时避免频繁创建销毁。 ...
Java中的单例模式是一种常用的软件设计模式,它保证一个类只有一个实例,并提供全局访问点。在Java编程中,单例模式常用于控制资源的访问,比如数据库连接池、线程池或者日志对象等。本篇文章将深入探讨如何在Java中...
接下来,我们将详细讨论单例模式的实现方式,包括懒汉式和饿汉式,以及如何通过同步枷锁来保证线程安全。 1. **懒汉式**(Lazy Initialization):懒汉式单例模式的特点是在第一次需要时才创建对象,即延迟初始化。...
在C++编程中,单例模式是一种常用的软件设计模式,它保证一个类只有一个实例,并提供一个全局访问点。在这个特定的场景中,我们讨论的是一个实现了单例模式的日志类,该类专为多线程环境设计,具备日志等级控制、...
2. **懒汉单例模式**:延迟到第一次调用`getInstance()`方法时才进行实例化,这种实现方式解决了饿汉模式的内存浪费问题,但在多线程环境下不安全。 ```java public class Singleton { private static Singleton ...
单例模式是软件设计模式中的一种,它的主要目的是确保一个类只有一个实例,并提供一个全局访问点。在Java或类似的面向对象编程语言中,单例模式常用于管理共享资源,如数据库连接池、线程池或者配置文件等。在这个...
为了保证这些信息的安全性及一致性,往往采用单例模式来管理配置对象的加载过程。这种方式可以确保无论何时读取配置信息都是最新的版本。 **6. 数据库连接池** 数据库连接是消耗系统资源较大的操作之一。为了提高...
【单例模式】是一种常用的软件设计模式,其主要目的是确保一个类只有一个实例,并提供一个全局访问点。在软件开发中,单例模式常用于管理共享资源或者需要协调多个组件交互的场景,比如数据库连接池、日志服务等。 ...
单例模式是软件设计模式中的一种经典模式,其核心思想在于限制类的实例化过程,确保在整个应用程序中只有一个实例存在。这种模式常用于管理共享资源,例如数据库连接、线程池或者全局配置等,以避免资源浪费和状态...