创建型模式_单例
来源:互联网 发布:网络报 关键 编辑:程序博客网 时间:2024/06/16 22:02
/**
* 单例模式
*/
public class SingleInstance {
private String name;
private static SingleInstance si=null;
private static Object syncObj=new Object();
/**
* 私有化构造函数,外界不能用new新建此实例
*/
private SingleInstance(){
}
/**
* 非线程安全的获取实例方法
*/
public static SingleInstance getNonThreadSafeInstance(){
if(si==null){
si=new SingleInstance();
}
return si;
}
/**
* 线程安全的获取实例方法:简单进行加锁对效率会有一定影响
*/
public static SingleInstance getThreadSafeInstance(){
synchronized(syncObj){
if(si==null){
si=new SingleInstance();
}
}
return si;
}
/**
* 线程安全的双重锁定获取实例方法:增加外层if判断增强多线程效率
*/
public static SingleInstance getThreadSafeDblLockInstance(){
if(si==null){
synchronized(syncObj){
if(si==null){
si=new SingleInstance();
}
}
}
return si;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
/**
* 模拟客户端
*/
public static void main(String[] args) {
SingleInstance nonThreadSafeSi1=SingleInstance.getNonThreadSafeInstance();
nonThreadSafeSi1.setName("非线程安全单例1");
System.out.println(nonThreadSafeSi1.getName());
SingleInstance nonThreadSafeSi2=SingleInstance.getNonThreadSafeInstance();
System.out.println(nonThreadSafeSi2.getName());
System.out.println();
SingleInstance threadSafeSi1=SingleInstance.getNonThreadSafeInstance();
threadSafeSi1.setName("线程安全单例1");
System.out.println(threadSafeSi1.getName());
SingleInstance threadSafeSi2=SingleInstance.getNonThreadSafeInstance();
System.out.println(threadSafeSi2.getName());
System.out.println();
SingleInstance threadSafeDblLockSi1=SingleInstance.getNonThreadSafeInstance();
threadSafeDblLockSi1.setName("线程安全双重锁定单例1");
System.out.println(threadSafeDblLockSi1.getName());
SingleInstance threadSafeDblLockSi2=SingleInstance.getNonThreadSafeInstance();
System.out.println(threadSafeDblLockSi2.getName());
System.out.println();
}
}
/*
运行结果
非线程安全单例1
非线程安全单例1
线程安全单例1
线程安全单例1
线程安全双重锁定单例1
线程安全双重锁定单例1
*/
* 单例模式
*/
public class SingleInstance {
private String name;
private static SingleInstance si=null;
private static Object syncObj=new Object();
/**
* 私有化构造函数,外界不能用new新建此实例
*/
private SingleInstance(){
}
/**
* 非线程安全的获取实例方法
*/
public static SingleInstance getNonThreadSafeInstance(){
if(si==null){
si=new SingleInstance();
}
return si;
}
/**
* 线程安全的获取实例方法:简单进行加锁对效率会有一定影响
*/
public static SingleInstance getThreadSafeInstance(){
synchronized(syncObj){
if(si==null){
si=new SingleInstance();
}
}
return si;
}
/**
* 线程安全的双重锁定获取实例方法:增加外层if判断增强多线程效率
*/
public static SingleInstance getThreadSafeDblLockInstance(){
if(si==null){
synchronized(syncObj){
if(si==null){
si=new SingleInstance();
}
}
}
return si;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
/**
* 模拟客户端
*/
public static void main(String[] args) {
SingleInstance nonThreadSafeSi1=SingleInstance.getNonThreadSafeInstance();
nonThreadSafeSi1.setName("非线程安全单例1");
System.out.println(nonThreadSafeSi1.getName());
SingleInstance nonThreadSafeSi2=SingleInstance.getNonThreadSafeInstance();
System.out.println(nonThreadSafeSi2.getName());
System.out.println();
SingleInstance threadSafeSi1=SingleInstance.getNonThreadSafeInstance();
threadSafeSi1.setName("线程安全单例1");
System.out.println(threadSafeSi1.getName());
SingleInstance threadSafeSi2=SingleInstance.getNonThreadSafeInstance();
System.out.println(threadSafeSi2.getName());
System.out.println();
SingleInstance threadSafeDblLockSi1=SingleInstance.getNonThreadSafeInstance();
threadSafeDblLockSi1.setName("线程安全双重锁定单例1");
System.out.println(threadSafeDblLockSi1.getName());
SingleInstance threadSafeDblLockSi2=SingleInstance.getNonThreadSafeInstance();
System.out.println(threadSafeDblLockSi2.getName());
System.out.println();
}
}
/*
运行结果
非线程安全单例1
非线程安全单例1
线程安全单例1
线程安全单例1
线程安全双重锁定单例1
线程安全双重锁定单例1
*/
- 创建型模式_单例
- 4、设计模式_创建型_单例模式
- Java设计模式_(创建型)_单例模式
- Java设置模式_创建型_单例模式_只存在一个实例
- Java设计模式_创建型模式_单例模式
- 23种设计模式(1)_创建型_单例模式(Singleton Pattern)
- [设计模式]SINGLETON(单件)_对象创建型模式
- 创建型模式-单例
- 创建型--单例模式
- 创建型-单例模式
- 单例模式(创建型)
- 创建型-单例模式
- 创建型[单例模式]
- 创建型-单例模式
- 创建型模式--单例模式(Singleton)
- 设计模式-创建型模式-单例
- 创建型模式-单例模式
- 创建型模式之单例模式
- PCI配置空间简介
- android新浪微博
- Linux下进程相关的系统调用
- 别让公积金“睡大觉” 教你八招用活公积金贷款
- C++头文件包含
- 创建型模式_单例
- linux条件锁
- 周永康赴四川考察成都中院及公安局等政法部门-周永康-政法建设-成都中院
- OE附件无标志的解决办法--Windows XP多国语版本
- linux 文件,相同行过滤
- DirectX简介 第四篇 DirectPlay简介
- ORACLE应用程序开发人员指南-1
- C# 的DateTime的12小时和24小时制
- cisco交换机上的链路聚合