单例模式
来源:互联网 发布:近年校园交通事故数据 编辑:程序博客网 时间:2024/06/05 20:39
单例模式:保证一个类仅有一个实例,并提供一个访问它的全局访问点
代码如下
public class SingleDemo {
private static SingleDemo sd = null;
private SingleDemo() {
}
private static SingleDemo getInstance() {
if (sd == null) {
sd = new SingleDemo();
}
return sd;
}
}
但是上面的代码在多线程时会出现问题。改进后的有以下三种方式:
(1)直接加锁
class SingleDemo {
private static SingleDemo a = null;
private SingleDemo () {
}
public static synchronized SingleDemo getInstance() {
if (a == null) {
a = new SingleDemo ();
}
return a;
}
}
(2)早期实例化
class SingleDemo {
private static SingleDemo b = new SingleDemo();
private SingleDemo() {
}
public static SingleDemo getInstance() {
return b;
}
}
(3)加双锁
class SingleDemo{
/**
* Volatile修饰的成员变量在每次被线程访问时,都强迫从共享内存中重读该成员变量的值。而且,当成员变量发生变化时,
* 强迫线程将变化值回写到共享内存。这样在任何时刻,两个不同的线程总是看到某个成员变量的同一个值。
* 由于使用volatile屏蔽掉了VM中必要的代码优化,所以在效率上比较低,因此一定在必要时才使用此关键字。
*/
private volatile static SingleDemo c = null;
private SingleDemo() {
}
public static SingleDemo getInstance() {
if (c == null) {
synchronized (SingleDemo.class) {
c = new SingleDemo();
}
}
return c;
}
}
应用场合:
线程池(threadpool)、缓存(cache)、注册表(registry)的对象、设备的驱动程序的对象,数据库的连接等等
- 单例、单例模式
- 单例模式-多线程单例模式
- 单件模式(单例模式)
- 设计模式------单例模式
- 设计模式------单例模式
- 设计模式-单例模式
- 设计模式 - 单例模式
- 设计模式---单例模式
- 设计模式---单例模式
- PHP模式-单例模式
- 【设计模式】单例模式
- 设计模式-单例模式
- 设计模式----单例模式
- 设计模式--单例模式
- 设计模式-单例模式
- 单例模式(单子模式)
- 设计模式-单例模式
- [设计模式] 单例模式
- ALV常用参数
- C++:GDI+ 半透明的阴影效果
- ASP.NET2.0数据库入门之常见错误
- mfc 常用方法 关于窗体 转
- Linux概述
- 单例模式
- 睡眠时间过长或过短都不利健康
- 在网络环境中什么叫拥塞
- ABAP Memory/SAP Memory/Shared Buffer/Database
- solaris系统环境变量的操作
- apache mina (异步连接框架)介绍
- 题目:x=x+1; x+=1;x++的效率那个高?
- win2003右键没有共享和安全的问题
- 计算机专业课程 视频教程