Java中设计模式之单例设计模式-1
来源:互联网 发布:虎扑认证淘宝店铺 编辑:程序博客网 时间:2024/04/30 15:15
单例作用
- 1 节省内存
- 2 可以避免多种状态导致状态冲突
单例的创建步骤
- 1 私有化构造方法
- 2 私有化声明的属性
- 3 getInstance
- 4 方法需要静态
单例分类
1.懒汉式
2.饿汉式
两种单例区别:
饿汉式 线程安全的
懒汉式 线程不安全的
饿汉式:
package 设计模式之单例;//饿汉式:public class HungeryMode { private final static HungeryMode INSTANCE=new HungeryMode(); public static HungeryMode getInstance() { return INSTANCE; } private HungeryMode(){}}
懒汉式:
package 设计模式之单例;public class LazyMode { private static LazyMode instance=null; public static LazyMode getInstance() { if(instance==null){ instance=new LazyMode(); } return instance; } private LazyMode(){}}
测试:
package 设计模式之单例;public class Test1 { public static void main(String[] args){ //饿汉式 HungeryMode instance=HungeryMode.getInstance(); HungeryMode instance2=HungeryMode.getInstance(); System.out.println("instance="+instance); System.out.println("instance2="+instance2); // 懒汉式 LazyMode instance3=LazyMode.getInstance(); LazyMode instance4=LazyMode.getInstance(); LazyMode instance5=LazyMode.getInstance(); System.out.println("instance3="+instance3+","+instance3.hashCode()); System.out.println("instance4="+instance4+","+instance4.hashCode()); System.out.println("instance5="+instance5+","+instance5.hashCode()); }}
测试结果:
创建多个对象,测试内存地址,如果相同说明创建的是同一个对象,说明创建的是单例!
延伸—————————–懒汉式线程安全性处理————————–
懒汉式线程不安全原因:
在多线程中,创建单例时,可能出现多个线程进入if(instance==null)执行语句中,在一个线程创建了一个instance后,其他进入执行语句的线程也会接着创建,这样就会产生多个对象,实现不了单例了,此时不安全了。
代码:
package 设计模式之单例;public class LazyMode2 { private static LazyMode2 instance=null; private LazyMode2(){} public static LazyMode2 getInstance(){ // 双重检查 if(instance==null){// 为了提高效率 尽可能少的让线程反复判断锁 synchronized (LazyMode2.class) {// 静态方法中 不能使用this 就可以用 本类.class 来代替 if(instance==null){ instance=new LazyMode2(); } } } return instance; }}
0 0
- Java中设计模式之单例设计模式-1
- 23中java设计模式之单例模式
- Java中常用的设计模式之单例模式
- JAVA中23种设计模式之单例模式
- java设计模式之单例设计
- java设计模式之单例模式
- Java模式设计之单例模式
- Java模式设计之单例模式
- Java模式设计之单例模式
- java设计模式之单例模式
- Java模式设计之单例模式
- Java模式设计之单例模式
- Java设计模式之单例模式
- Java设计模式之单例模式
- Java设计模式之单例模式
- Java设计模式之单例模式
- Java模式设计之单例模式
- java设计模式之单例模式
- webpack进阶构建项目(一)
- 剑指offer(C++)——矩阵覆盖
- [JZOJ5086]数列
- softmax分类器 python实现
- HDU 3367:Pseudoforest
- Java中设计模式之单例设计模式-1
- PHP源码阅读 Day.2 解读PHP底层 mysql的驱动链接
- __ATTRIBUTE__ 你知多少?
- HZAU 1202 GCD( 斐波那契数列+矩阵快速幂)
- HocTracker:动态社会网络的群组演化追踪
- 回文子序列 ssl 2662 暴力
- opencv学习笔记-openCV2与opencv3机器学习库MLL
- ~二维数组中的查找~
- Retrofit