Java设计模式——单例模式
来源:互联网 发布:网络词汇 编辑:程序博客网 时间:2024/06/02 05:36
单例模式定义:确保一个类只有一个实例,并提供一个全局访问点。全局访问点的概念有点类似于java中的全局变量的概念,但是单例模式的方式比全局变量效率更高,因为全局访问点在程序开始到结束都要占用资源,但是单例模式则是在用到时才占用资源。下面实现一个单例模式Demo。
单例模式类
package test;public class Singleton {public static int a = 0;public int tag = 0;private static Singleton uniqueInstance;// 将变量设为私有,防止外部引用// 私有的默认构造函数,防止使用构造函数进行实例化private Singleton() {this.tag = ++a;// 实例化一次Singleton类,则tag自加1// for循环作用是等待for (int i = 0; i < 100000; i++) {}}/** * 对getInstance()方法进行锁定,synchronized同步防止多线程环境同时执行,这种方式偶尔会导致Singleton被多次实例化 * * @return */// public synchronized static Singleton getInstance() {// if (uniqueInstance == null) {// uniqueInstance = new Singleton();// }// return uniqueInstance;// }/** * synchronized对语句块进行锁定,而不是对方法锁定 * * @return */public static Singleton getInstance() {if (uniqueInstance == null) {// synchronized同步的必须是类:Singleton.class,而不能是类的对象:uniqueInstancesynchronized (Singleton.class) {if (uniqueInstance == null) {uniqueInstance = new Singleton();}}}return uniqueInstance;}}
测试类
package test;public class Test {public static void main(String[] args) {// 主线程启动第一个子线程new Thread() {public void run() {for (int i = 0; i < 1000; i++) {new TestThread(i).start();}}}.start();// 主线程启动第二个子线程,与此同时第一个子线程还没有结束,这样,此时的状态就是一个主线程,两个子线程,并且两个子线程都想实例化Singleton对象new Thread() {public void run() {for (int i = 1000; i < 2000; i++) {new TestThread(i).start();}}}.start();}/** * 定义测试线程内部类,线程先休眠随机时间,然后调用Singleton.getInstance()实例化一个Singleton对象 * * @author CYL * */public static class TestThread extends Thread {private int i;public TestThread(int i) {this.i = i;}@Overridepublic void run() {try {Thread.sleep((long) (Math.random() * 10));} catch (InterruptedException e) {e.printStackTrace();}Singleton s = Singleton.getInstance();if (s.tag != 1)System.out.println(i + "\t" + s.tag);super.run();}}}
测试结果:无打印输出,如果是Singleton被实例化了多个对象,则会打印出实例化次数。
- Java 设计模式—单例模式
- java设计模式—单例模式
- java设计模式—单例模式
- java设计模式—单例模式
- Java设计模式—单例模式
- Java设计模式—单例模式
- Java设计模式—单例模式和模板模式
- JAVA设计模式——单例设计模式
- Java设计模式——单例设计模式
- Java设计模式——单例设计模式
- java设计模式——单例设计模式
- java设计模式——单例设计模式
- Java 设计模式—单例设计模式总结
- java——单例设计模式
- Java——单例设计模式
- Java设计模式——单例
- Java——单例设计模式
- Java—JAVA设计模式之单例模式
- 给JQueryUI中DatePicker组件增加清除按钮
- Android WebView的缓存!!!
- gtest框架的介绍与应用
- C++成员变量的初始化方式
- 黑马程序员-----java基础二十三(交通灯管理方案代码实现)
- Java设计模式——单例模式
- Android应用开发揭秘(笔记) 第十章 Android应用开发实例
- [JavaScript]AJAX方法简单示例——1(.load()方法)
- 黑马程序员-----java基础二十四(银行柜台取票管理方案代码实现)
- Huffman编码
- Tomcat Too Many Open Files
- 宏与内联函数
- VC6.0中友元函数无法访问类私有成员的解决办法
- JavaScript replace(rgExp,fn)正则替换的用法