单例模式
来源:互联网 发布:玄空飞星排盘软件下载 编辑:程序博客网 时间:2024/05/16 06:35
package SingleClass;
// 使用单例模式时,建议使用饿汉式
//饿汉式,一旦加载类就new单例对象,方便简单,不存在线程安全隐患
class Single1 {
// 三步:1.私有静态变量对象 2.私有化构造方法 3.静态方法返回类的对象
private static Single1 s1 = new Single1();
private Single1() {
}
public static Single1 getInstance() {
return s1;
}
}
// 懒汉式,调用静态方法的时候才new单例对象,此例存在线程安全隐患,例3、例4能解决
class Single2 {
private static Single2 s2 = null;
private Single2() {
}
public static Single2 getInstance() {
if(s2 == null) {
// 当线程A执行到此处时被CPU挂起,而线程B也来执行,就不能保证单例类的对象唯一性
s2 = new Single2();
}
return s2;
}
}
class Single3 {
private static Single3 s3 = null;
private Single3() {
}
// 给这个静态方法加上锁,就能解决安全问题,但是每调用一次静态方法都要判断锁是否关着,比较费时
public static synchronized Single3 getInstance() {
if(s3 == null) {
s3 = new Single3();
}
return s3;
}
}
class Single4 {
private static Single4 s4 = null;
private Single4() {
}
public static Single4 getInstance() {
// 双重判断
if(s4 == null) {
// s4不为空就不必检查锁的状态了,省得每次都要检查
synchronized(Single4.class) {
if(s4 == null) {
s4 = new Single4();
}
}
}
return s4;
}
}
// 使用单例模式时,建议使用饿汉式
//饿汉式,一旦加载类就new单例对象,方便简单,不存在线程安全隐患
class Single1 {
// 三步:1.私有静态变量对象 2.私有化构造方法 3.静态方法返回类的对象
private static Single1 s1 = new Single1();
private Single1() {
}
public static Single1 getInstance() {
return s1;
}
}
// 懒汉式,调用静态方法的时候才new单例对象,此例存在线程安全隐患,例3、例4能解决
class Single2 {
private static Single2 s2 = null;
private Single2() {
}
public static Single2 getInstance() {
if(s2 == null) {
// 当线程A执行到此处时被CPU挂起,而线程B也来执行,就不能保证单例类的对象唯一性
s2 = new Single2();
}
return s2;
}
}
class Single3 {
private static Single3 s3 = null;
private Single3() {
}
// 给这个静态方法加上锁,就能解决安全问题,但是每调用一次静态方法都要判断锁是否关着,比较费时
public static synchronized Single3 getInstance() {
if(s3 == null) {
s3 = new Single3();
}
return s3;
}
}
class Single4 {
private static Single4 s4 = null;
private Single4() {
}
public static Single4 getInstance() {
// 双重判断
if(s4 == null) {
// s4不为空就不必检查锁的状态了,省得每次都要检查
synchronized(Single4.class) {
if(s4 == null) {
s4 = new Single4();
}
}
}
return s4;
}
}
0 0
- 单例、单例模式
- 单例模式-多线程单例模式
- 单件模式(单例模式)
- 设计模式------单例模式
- 设计模式------单例模式
- 设计模式-单例模式
- 设计模式 - 单例模式
- 设计模式---单例模式
- 设计模式---单例模式
- PHP模式-单例模式
- 【设计模式】单例模式
- 设计模式-单例模式
- 设计模式----单例模式
- 设计模式--单例模式
- 设计模式-单例模式
- 单例模式(单子模式)
- 设计模式-单例模式
- [设计模式] 单例模式
- kmalloc分配物理内存与高端内存映射--Linux内存管理(十八)
- [Extjs6]随记--创建window窗体对象
- 《Java报表之JFreeChart》第五讲
- fft+分治 ifrog1044 Quailty and Binary Operation
- 创建以及响应菜单、上下文菜单
- 单例模式
- C语言指针作为形参的例子
- uva 113 Power of Cryptography
- Jar包混淆的两种方式
- 天天写业务代码,如何成为技术大牛?
- Spring之加载.properties文件
- effective stl 第37条:使用accumulate或者for_each进行区间统计
- 算法-java(1.5注解与习题)
- HTML学习笔记-DOCTYPE+meta(一)