java 单例模式之旅
来源:互联网 发布:ubuntu没有win7启动项 编辑:程序博客网 时间:2024/05/10 14:24
单例模式在Java中定义:一个类有且仅有一个实例,并且自行实例化向整个系统提供。在实际开发中,往往我们有这种需求,有些类,它在系统中只能存在一个实例。比如说在android 开发中,我们会在Application启动中,初始化一些数据,比如登陆名,全局Context,ip地址和端口等等,这时候就可以设计一个单例模式的类来存放这些数据。这里只讨论单例模式的两种写法,饿汉式和懒汉式。
饿汉式:
package com.example.administrator.hideintent;/** * Created by dhl on 2016/12/19. * 饿汉式单例类,在类初始化的时候,已经自行实例化 */public class SingletonClass { private static final SingletonClass singletonClass = new SingletonClass(); private SingletonClass() { } public static SingletonClass getInstance() { return singletonClass ; }}懒汉式:
package com.example.administrator.hideintent;/** * Created by dhl on 2016/12/19. * 单例类,在第一次调用的时候,实例化自己, */public class SingletonClass { private static SingletonClass singletonClass = null; private SingletonClass() { } public static SingletonClass getInstance() { if(singletonClass == null) { singletonClass = new SingletonClass(); } return singletonClass ; }}
饿汉式因为类创建的时候,就实例化该类,并不存在线程安全问题,但是懒汉式存在线程安全问题。所以要对懒汉式加锁:
package com.example.administrator.hideintent;/** * Created by dhl on 2016/12/19. * 单例类,在第一次调用的时候实例化自己,加锁 */public class SingletonClass { private static SingletonClass singletonClass = null; private SingletonClass() { } public static SingletonClass getInstance() { if(singletonClass == null) { synchronized (SingletonClass.class) { if(singletonClass == null) { singletonClass = new SingletonClass(); } } } return singletonClass ; }}
总结:
1,饿汉式是线程安全的,在类创建的时候就创建一个静态的实例供系统使用,以后不再改变。如果该实例在系统中经常使用,饿汉式是个不错的选择。
2,懒汉式, 如果不加锁,则线程不安全。缺点是加锁性能有所损耗,优点是延时加载。如果该实例没有频繁被用到,懒汉式是个不错的选择。
0 0
- java 单例模式之旅
- Java之单例模式
- Java之单例模式
- Java之单例模式
- Java之单例模式
- java 之 单例模式
- java之单例模式
- java之单例模式
- java之单例模式
- java之单例模式
- Java之单例模式
- Java之单例模式
- Java之单例模式
- JAVA之单例模式
- java之单例模式
- java之单例模式
- java之单例模式
- java之单例模式
- Android之AlarmManager(全局定时器/闹钟)指定时长或以周期形式执行某项操作
- SQL SERVER日常运维巡检系列之五——实例级参数
- win10 Hyper中Ubunto和物理机共享文件
- 开启MySQL远程访问的权限
- JS语言学习----面向对象编程
- java 单例模式之旅
- Java 实现系统权限控制思路
- CH6--正则表达式p110,重要,常用表格js提交验证,onblur验证精炼代码,光盘中有全部代码
- tomcat乱码问题
- 修复添加system/app应用crash bug
- 数据库监听
- div滚动条在最低端
- SQL SERVER日常运维巡检系列之六——作业运行情况
- java相关基础知识整理复习(二)