- 浏览: 164374 次
- 性别:
- 来自: 南京
文章分类
- 全部博客 (327)
- JAVA (130)
- 工作笔记 (49)
- SQLSERVER (5)
- ORACLE (28)
- nginx (1)
- Unix C (16)
- 系统 (19)
- 网络技术 (17)
- WEB前端 (22)
- Eclipse (2)
- Tomcat (1)
- spring (7)
- MYSQL (12)
- Maven (6)
- JETTY (2)
- 设计 (2)
- 开源项目 (7)
- asterisk (0)
- C++ (2)
- WINDOWS (2)
- SCALA (0)
- 协议 (1)
- Netty (1)
- SHELL (1)
- mybaits (4)
- 并发 (2)
- 架构 (2)
- TCP/IP (8)
- 虚拟化 (3)
- 不要再说java慢 (0)
- mac (2)
- mysql乱码完美解决 (1)
最新评论
http://freish.iteye.com/blog/1008304
在JDK1.5及其后续版本中,扩充了volatile语义,系统将不允许对 写入一个volatile变量的操作与其之前的任何读写操作 重新排序,也不允许将 读取一个volatile变量的操作与其之后的任何读写操作 重新排序。
在jdk1.5及其后的版本中,可以将instance 设置成volatile以让双重检查锁定生效,如下:
public class Singleton {
private static volatile Singleton instance = null;
private Singleton(){}
public static Singleton getInstance() {
if(instance == null) {
synchronized(Singleton.class) {
if(instance == null) {
instance = new Singleton();
}
}
}
return instance;
}
}
需要注意的是:在JDK1.4以及之前的版本中,该方式仍然有问题。
在JDK1.5及其后续版本中,扩充了volatile语义,系统将不允许对 写入一个volatile变量的操作与其之前的任何读写操作 重新排序,也不允许将 读取一个volatile变量的操作与其之后的任何读写操作 重新排序。
在jdk1.5及其后的版本中,可以将instance 设置成volatile以让双重检查锁定生效,如下:
public class Singleton {
private static volatile Singleton instance = null;
private Singleton(){}
public static Singleton getInstance() {
if(instance == null) {
synchronized(Singleton.class) {
if(instance == null) {
instance = new Singleton();
}
}
}
return instance;
}
}
需要注意的是:在JDK1.4以及之前的版本中,该方式仍然有问题。
发表评论
-
[转]如何用消息系统避免分布式事务
2015-09-11 16:17 401http://mp.weixin.qq.com/s?__biz ... -
QQ 新浪 淘宝联合登录(转)
2015-08-11 10:53 493http://takeme.iteye.com/blog/1 ... -
Linkedin开源实时分析框架Pinot
2015-06-20 10:39 492[url]http://engineering.linkedi ... -
自增主键
2015-06-17 16:56 461http://www.cnblogs.com/heyuquan ... -
Spring-Petclinic
2015-04-04 08:27 341petclinic http://xpenxpen.itey ... -
nginx 基本配置
2015-04-03 21:31 490http://www.cnblogs.com/lost-198 ... -
日志异步化
2015-03-25 22:44 398http://www.oschina.net/translat ... -
hiberbate 包升级和oracle版本
2015-03-16 15:00 463hibernate 版本和oracle 版本的问题。 228 ... -
Maven配置本地库加载ojdbc14-10.2.0.4.0.jar文件
2015-03-16 09:46 505http://blog.sina.com.cn/s/blog_ ... -
hibernate自增主键
2015-03-14 21:11 391http://xiaowei-qi-epro-com-cn.i ... -
kafka
2015-03-10 23:21 424http://www.infoq.com/cn/news/20 ... -
c3p0 参数
2015-03-09 18:15 555http://haoran-10.iteye.com/blog ... -
网友的学习路线值得借鉴
2015-03-04 10:08 369http://blog.csdn.net/liuxiaoyi2 ... -
使用JDBC获取各数据库的Meta信息——表以及对应的列
2015-01-03 13:21 446http://blog.csdn.net/renfufei/a ... -
hadoop 在centos 64位上的编译,非常重要
2014-12-09 21:15 388http://blog.csdn.net/picassolov ... -
hbase 在虚拟机中的安装(单节点) (转)
2014-12-02 16:39 406http://www.tuicool.com/articles ... -
Spring管理多数据源
2014-11-22 12:45 317http://blog.csdn.net/lovesqcc/a ... -
Java高并发编程——为IO密集型应用设计线程数与划分任务
2014-11-22 12:29 1462http://blog.csdn.net/xichenguan ... -
netty 和nio
2014-11-16 12:38 396http://blog.csdn.net/column/det ... -
spring mvc 的几个注解
2014-11-12 19:39 407http://csjava.blog.163.com/blog ...
相关推荐
在这个特定的场景中,我们讨论的是一个实现了单例模式的日志类,该类专为多线程环境设计,具备日志等级控制、精确的时间戳以及可变长参数和标准格式化输出的功能。 首先,让我们深入了解单例模式。单例模式的主要...
在Java中,实现单例模式有多种方法,包括懒汉式(线程不安全)、饿汉式、双重检查锁定(DCL)以及枚举方式。其中,DCL和枚举方式是推荐的,因为它们既保证了线程安全,又避免了不必要的同步开销。 单例模式的Java...
单例模式是软件设计模式中的一种经典模式,它限制了类的...在实际应用中,应根据项目需求选择适合的单例实现方式,考虑到性能和线程安全等因素。同时,理解并掌握这些实现方式有助于提升编程技能和解决实际问题的能力。
本文将深入探讨如何在C# WinForm应用中实现窗体的单例模式。 首先,理解单例模式的基本原理。单例模式的核心在于限制类的实例化过程,通常通过私有构造函数和静态工厂方法来实现。在C#中,我们可以创建一个静态私有...
- **枚举类型**(Enum):这是Java中最简洁且线程安全的单例实现方式。 ```java public enum Singleton { INSTANCE; public void whateverMethod() { } } ``` 在实际开发中,单例模式常用于配置管理、缓存、...
单例模式有多种实现方式,以下是四种常见的实现方式: 1. 饿汉式 饿汉式是最简单的单例模式实现方式。其优点是没有加锁,执行效率会提高。但是,它的缺点是类加载时就初始化,浪费内存。 ``` public class ...
在Java中实现单例模式有多种方法,包括懒汉式(线程不安全)、饿汉式(线程安全)、双重检查锁定(DCL,线程安全)以及枚举单例。确保单例模式正确实现的关键在于防止多线程环境下的多次实例化和序列化/反序列化时的...
接下来,我们将详细介绍两种实现Python单例模式的方法。 **方法一:双重检查加锁** 这种方法的关键在于“双重检查”和“线程安全”。首先,我们定义一个类`Singleton`,并初始化一个类级别的变量`__instance`来...
一个实现为单例的简单统计计数器。 概述 统计计数器在实时环境中用于映射行为以及对项目进行计数很有用。 它应该允许从系统中的任何位置添加或更新任何计数器。 这是一个实现为单例的简单统计计数器。 计数类型为...
典型的单例实现可能包含`private static`变量存储单例实例,以及一个`public static`方法返回这个实例。单例模式常用于资源管理,例如数据库连接、日志记录器或者配置管理。 在WinForms应用程序中,序列化可能用于...
在C#中,实现单例模式通常有多种方法,这里展示的是通过泛型实现的单例模式。 代码示例中的`Singleton<T>`类是一个泛型类,它定义了一个静态成员`Instance`,用于返回类的实例。内部嵌套的静态类`SingletonCreator`...
在给定的代码示例中,我们看到了两种常见的单例实现方式:懒汉式和饿汉式。 **懒汉式单例模式**: 懒汉式单例的特点是延迟初始化,即只有在第一次调用`getInstance()`方法时才会创建单例对象。这种方式在Java中通常...
在上面的代码中,我们使用了单例设计模式来实现`WavMergeUtil`类的实例化。在Java中,单例设计模式是一种常用的设计模式,用于确保类的实例化只有一个。 知识点7:Java中的多线程编程 在上面的代码中,我们没有...
在 TypeScript 中,我们可以利用静态属性和私有构造函数来实现单例模式,从而确保类的唯一性。以下是对这个"Example-TypeScript-Singleton-Pattern"项目的详细解析。 1. **TypeScript 基础知识**: TypeScript 是 ...
在给定的标题和描述中,提到了五个关键的设计原则:责任链模式、桥接模式、适配器模式、单例模式以及命令模式。这些模式都是面向对象设计中的经典模式,对iOS开发尤其重要,因为它们可以帮助我们更好地组织代码,...
在描述中还提到了单例模式的两种实现方式:饿汉式和懒汉式。饿汉式在类加载时就完成了对象的初始化,懒汉式则是在第一次调用获取实例的方法时才创建对象。饿汉式简单且线程安全,但可能导致资源浪费;懒汉式节省资源...
在这个文档中,我们看到了一个简单的动物类接口,包含 `run()`, `swim()`, `fly()` 方法,然后有一个适配器类实现了这些方法,但只在鸟类子类中实现了 `fly()` 方法,这样就可以让不同的动物类型适应统一的接口。...
C#中的静态类和 sealed 关键字可以方便地实现单例模式。工厂模式则用于创建对象,它将对象的创建过程抽象化,使得系统在不指定具体类的情况下也能创建对象。C#中的抽象工厂类和接口可以很好地支持这种模式。 装饰器...