单例模式优化
- 1、使用同步保正线程安全 synchronized
- 2、使用volatile关键字
volatile提醒编译器它后面所定义的变量随时都有可能改变,
因此编译后的程序每次需要存储或读取这个变量的时候,都会直接从变量地址中读取数据。
如果没有volatile关键字,则编译器可能优化读取和存储,
可能暂时使用寄存器中的值,如果这个变量由别的程序更新了的话,将出现不一致的现象。 - 3、防止反射调用私有构造方法
- 4、让单例类序例化安全
- 单例模式
- 1、多线程访问的安全问题
- 2、加上volatile关键字保证变量的一致性
- 3、防止反射调用私有构造方法
- 4、让单例类可以被序列化
package com.vince.singleton;
import java.io.Serializable;
/**
* Created by vince on 2017/6/14.
* 单例模式
* 1、多线程访问的安全问题
* 2、加上volatile关键字保证变量的一致性
* 3、防止反射调用私有构造方法
* 4、让单例类可以被序列化
*/
public class Singleton implements Serializable {
private volatile static Singleton singleton = null;
private Singleton(){
if (singleton!=null){
throw new RuntimeException("此类对象为单例模式,已经被实例化了");
}
}
public static Singleton getInstance() {
if (singleton==null) {
synchronized (Singleton.class) {
if (singleton == null) {
singleton = new Singleton();
}
}
}
return singleton;
}
}
前面的博客目录
1、什么是反射
2、Class类
3、通过Class类取得类信息
4、通过Class类调用属性或方法
5、动态代理
6、JavaBean的概念
7、内省基本概念
8、 Introspector 相关API
9、单例模式优化
博客围绕Java单例模式优化展开。介绍了使用synchronized保证线程安全,用volatile关键字确保变量一致性,防止反射调用私有构造方法,以及让单例类序列化安全等优化方法。还提及单例模式存在多线程访问安全问题,以及之前博客涉及反射、Class类等内容。
1008

被折叠的 条评论
为什么被折叠?



