单例模式
来源:互联网 发布:供水企业安全生产软件 编辑:程序博客网 时间:2024/06/15 07:17
单例模式(Singleton),保证一个类仅有一个实例,并提供一个访问它的全局访问点。
单例模式因为Singleton类封装它的唯一实例,这样它可以严格地控制客户怎样访问它以及何时访问它。简单地说就是对唯一实例的受控访问。
package gof23;public class SingletonTest {public static void main(String[] args) {Singleton obj1 = Singleton.getInstance();Singleton obj2 = Singleton.getInstance();System.out.println(obj1 == obj2);}}class Singleton {private static Singleton instance = null;private Singleton() { //构造方法让其private,这就堵死了外界利用new创建此类实例的可能}public static Singleton getInstance(){if(instance == null) {instance = new Singleton();}return instance;}}结果为:
true
多线程时的单例
多线程的程序中,多个线程同时,注意是同时访问Singleton类,调用getInstance()方法,会有可能造成创建多个实例,这个时候可以给进程加一把锁进行处理。
package gof23;import java.util.concurrent.locks.ReentrantLock;public class SingletonTest {public static void main(String[] args) {Singleton obj1 = Singleton.getInstance();Singleton obj2 = Singleton.getInstance();System.out.println(obj1 == obj2);}}class Singleton {private static Singleton instance = null;private static ReentrantLock lock = new ReentrantLock();private Singleton() { //构造方法让其private,这就堵死了外界利用new创建此类实例的可能}public static Singleton getInstance(){if(instance == null) {lock.lock(); //先判断实例是否存在,不存在在加锁处理,可以避免每次调用getInstance方法都需要locktry {if(instance == null) { //双重锁定instance = new Singleton();}}finally {lock.unlock(); //释放锁}}return instance;}}
运行结果为:
true
0 0
- 单例、单例模式
- 单例模式-多线程单例模式
- 单件模式(单例模式)
- 设计模式------单例模式
- 设计模式------单例模式
- 设计模式-单例模式
- 设计模式 - 单例模式
- 设计模式---单例模式
- 设计模式---单例模式
- PHP模式-单例模式
- 【设计模式】单例模式
- 设计模式-单例模式
- 设计模式----单例模式
- 设计模式--单例模式
- 设计模式-单例模式
- 单例模式(单子模式)
- 设计模式-单例模式
- [设计模式] 单例模式
- poj 1700 Crossing River
- Android 几种布局方式~深入浅出谈`菜鸟入门必备
- 想到什么写什么随笔
- 输入一个已经按升序排序过的数组和一个数字
- Android 开发中java.lang.verifyerror问题
- 单例模式
- psp开发------按键识别
- vim 自动补全和自动提示
- Linux系统编程(5)——文件与IO之mmap函数
- 链表系列之单链表常见面试题
- UVA548
- 用Toad for Oracle将数据库表等信息导出为html
- 【原创】《Linux设备驱动程序》学习之循序渐进 --- 内核数据类型
- 自旋锁的讨论