自己以前认识的单例模式很简单:
方式一:
public class TestSecrity {
private static TestSecrity test = null;
public static synchronized TestSecrity getInstance() {
if(test == null) {
test = new TestSecrity();
}
return test;
}
private TestSecrity() {
}
}
方式二:
public class TestSecrity {
private static TestSecrity test = new TestSecrity ();
public static TestSecrity getInstance() {
return test;
}
private TestSecrity() {
}
}
原来以为这两种方式写好之后就没有问题,
今天拜读了下面的文章,才知道第一种是有问题;而且即使是第一种方式,每次调用都会要同步,众所周知,同步是要消耗性能的,所以很多人想了一个办法:
进行双重检查锁定,但是这样仍然不能保证线程安全。
具体看下面的收藏贴,
收藏贴
http://www.ibm.com/developerworks/cn/java/j-dcl.html
另外:当多个线程访问同一个对象的方法的时候,线程是单独保存一份数据在栈中,也就是说方法中的局部变量是不会被共享的,不会存在线程安全问题。
分享到:
相关推荐
### 线程安全的单例模式详解 #### 一、单例模式简介 单例模式(Singleton Pattern)是软件开发中最常用的创建型设计模式之一,它的主要目标...其中,双重检查锁定因其较高的性能和线程安全性,成为了较为推荐的做法。
在C++编程中,单例模式是一种...这种实现方式既简单又高效,避免了传统实现(如双重检查锁定)可能存在的性能问题。在实际项目中,根据具体需求,可以进一步扩展单例模式,例如添加懒加载特性或在析构时进行资源清理。
以上就是单例模式在Java中的常见实现方式,其中线程安全的实现包括饿汉式、静态代码块、双重检查锁定、静态内部类以及枚举方式。在实际应用中,应根据项目需求选择适合的单例实现方式,考虑到性能和线程安全等因素。...
4. 双重检查锁定(DCL):结合了懒汉式的延迟加载和饿汉式的线程安全,既保证了线程安全,又降低了性能影响。 ```java public class Singleton { private volatile static Singleton INSTANCE; private Singleton...
- **懒汉式**:通过静态内部类或者双重检查锁定的方式来实现线程安全的懒加载单例模式,即在第一次使用时才初始化。 #### 十、线程安全的懒汉式单例 懒汉式单例在实现线程安全性时,通常采用双重检查锁定技术: ``...
4. **双重检查锁定(DCL)单例**: 结合了懒汉式的延迟初始化和饿汉式的线程安全性,更高效。 ```java public class Singleton { private volatile static Singleton instance; private Singleton() {} public...
4. 双重检查锁定(DCL,线程安全): 使用volatile关键字保证线程可见性和避免指令重排序,确保多线程环境下的安全性。 ```csharp public class Singleton { private static volatile Singleton instance; ...
单例模式的核心在于控制类的实例化过程,常见的实现方式有懒汉式、饿汉式和双重检查锁定(DCL)等。懒汉式是在类被加载时并不创建实例,而是在第一次调用getInstance方法时才创建;饿汉式则是在类加载时就创建实例,...
3、懒汉式单例(双重检查锁定) public class Singleton3 { private Singleton3() {} private static Singleton3 single = null; public static Singleton3 getInstance() { if (single == null) { ...
接下来是**双重检查锁定(Double-Check Locking)**,它结合了懒汉式和饿汉式的优点,既延迟初始化,又保证了线程安全。代码如下: ```java public class Singleton { private volatile static Singleton instance...
单例模式有多种实现方式,常见的包括懒汉式、饿汉式以及双重检查锁定(DCL)等。 1. 懒汉式:懒汉式是在第一次使用时才创建单例对象,以延迟加载提高效率。但是,如果在多线程环境下,没有正确处理同步问题,可能...
5. 双重检查锁定(DCL,线程安全): 在`instance`为null且同步创建之前,进行第二次检查,提高效率。 ```java public class Singleton { private volatile static Singleton instance; private Singleton() {}...
3. **双重检查锁定(DCL,线程安全)**:在多线程环境下,通过双重检查锁定来确保线程安全,避免了同步带来的性能影响。 ```java public class Singleton { private volatile static Singleton instance; private ...
单例模式是软件设计模式中的一种基础且广泛应用的模式,它的主要目的是确保一个类只有一个实例...在Java中,推荐使用双重检查锁定的懒汉式或静态内部类的饿汉式,它们在保证线程安全的同时,兼顾了性能和资源利用效率。
3. **双重检查锁定(DCL,线程安全)**: 在`getInstance`方法中添加了双重检查,确保了线程安全。 ```java public class Singleton { private volatile static Singleton instance; private Singleton() {} ...
4. 双重检查锁定(DCL,线程安全): 结合了懒汉式和线程安全性,避免了同步带来的性能开销。 ```java public class Singleton { private volatile static Singleton instance; private Singleton() {} public ...
本文将详细讨论四种常见的单例实现方式:饿汉模式、懒汉模式、双重检查锁定(DCL)单例模式以及枚举单例。 1. **饿汉模式**: 饿汉模式是在类加载时就完成了实例化,避免了线程同步问题。这种方式简单且安全,但...
在Java中,懒汉式的单例模式通常通过双重检查锁定(Double-Check Locking,DCL)来实现,这是一种线程安全的方式。下面是一个简单的DCL实现的懒汉式单例模式代码示例: ```java public class Singleton { private ...
为了使懒汉模式在多线程环境中成为线程安全的单例,我们可以引入互斥锁(`pthread_mutex_t`)。在C++中,通常使用`std::mutex`,但在示例中使用了POSIX线程库`pthread`。当多个线程尝试访问`GetInstance()`时,只有...
在懒汉式的基础上,加入了双重检查锁定(Double-Check Locking),确保线程安全的同时减少同步开销。 ```java class Singleton { private volatile static Singleton instance = null; private Singleton() {}...