java设计模式之单例模式
来源:互联网 发布:淘宝客api视频教程 编辑:程序博客网 时间:2024/06/06 18:00
单例模式是java常见设计模式之一。
作用是使某一个类在系统中只存在一个实例,且由这个类自己生成并向整个系统提供。
通常用于将系统中重量级的对象设计为该模式,如:线程池、日志、缓存、打印机驱动程序等。
其实现方法有多种,这里只说明三种:
Singleton的private构造方法是为了防止在外部通过new方法创建对象;在同一个虚拟机内只能通过getInstance方法获取实例。
注意反射机制是可以实例化private构造方法对象的,会使所有单例失效。就先假设不存在反射机制。
1.饿汉式:
public class Singleton{
private static Singleton single=new Singleton();
private Singleton(){}
publicstatic Singleton getInstance(){
return single;
}
}
饿汉式是在类加载的时候就实例化了对象,天生线程安全。但是在实际中不管实例会不会用到在类加载时都会创建,这样就会占用多余内存。
2.懒汉式
public class Singleton{
private static Singleton single=null;
private Singleton(){}
public static Singleton getInstance(){
if(single==null){
single=new Singleton();
}
return single;
}
}
懒汉式在第一次用到实现的时候才去创建一次。
这种方法线程不安全(并发环境下可能会出现多个单例实例)。以下对于方法的修改使其变成线程安全
public static synchronized Singleton getInstance(){//方法加同步锁
if(single==null){
single=new Singleton();
}
return single;
}
public static synchronized Singleton getInstance(){//双重检查锁定
if(single==null){
sychronized(Singleton.class){
if(single==null){
single=new Singleton();
}
}
}
return single;
}
public class Singleton { //静态内部类 此方法既解决了线程不安全,又避免了同步锁带来的性能问题
private static class LazyHolder {
private static final Singleton INSTANCE = new Singleton();
}
private Singleton (){}
public static final Singleton getInstance() {
return LazyHolder.INSTANCE;
}
}
参考链接:http://blog.csdn.net/jason0539/article/details/23297037/
- java设计模式之单例模式
- Java模式设计之单例模式
- Java模式设计之单例模式
- Java模式设计之单例模式
- java设计模式之单例模式
- Java模式设计之单例模式
- Java模式设计之单例模式
- Java设计模式之单例模式
- Java设计模式之单例模式
- Java设计模式之单例模式
- Java设计模式之单例模式
- Java模式设计之单例模式
- java设计模式之单例模式
- java设计模式之单例模式
- java设计模式之单例模式
- java设计模式之单例模式
- java设计模式之单例模式
- java设计模式之单例模式
- 第11篇:Angular 监听路由变化
- 自定义一个好看点的TabLayout.Tab
- linux下环境搭建(java环境、安装nginx)
- Java还要再学一遍基础(十七)- Object的finalize方法
- 事务隔离级别
- java设计模式之单例模式
- windows中如何开启一个console来调试信息
- 其他API
- 在Spring Boot中使用Spring Security实现权限控制
- session技术进行登录验证问题解析
- C++继承与Class 内存模型
- Linux错误解决
- 乱码问题
- git reset