您的位置:首页 > 编程语言 > Java开发

Java设计模式_单例设计模式

2017-02-28 20:40 113 查看
/**
* 单例设计模式:饿汉式,不适用于多线程,效率低
*/
public class SingleTest {
//定义一个私有的构造方法
private SingleTest()
{}
//将自身的实例对象设置成静态 final
private static final SingleTest instance = new SingleTest();
private static SingleTest getInstance(){
return instance;
}}/*** 单例设计模式:饱汉式,非线程安全*/public class SingleTest {//定义一个私有的构造方法private SingleTest(){}//将自身的实例对象设置成静态(不初始化,没有final修饰)private static SingleTest instance ;private static SingleTest getInstance(){if(instance==null)instance = new SingleTest();return instance;}}
/*** 单例设计模式:饱汉式,线程安全,效率不高*/public class SingleTest {//定义一个私有的构造方法private SingleTest(){}//将自身的实例对象设置成静态(不初始化,没有final修饰)private static  SingleTest instance ;private static synchronized SingleTest getInstance(){if(instance==null)instance = new SingleTest();return instance;}}
/*** 单例设计模式:饱汉式,最优解*/public class SingleTest {//定义一个私有的构造方法private SingleTest(){}//将自身的实例对象设置成静态(不初始化,没有final修饰,使用volatile保证了线程访问时instance变量的可见性,// 避免了instance初始化时其他属性还没赋值完时被另外的线程调用)private static  volatile  SingleTest instance ;private static  SingleTest getInstance(){// 对象实例化时与否判断(不使用同步代码块,instance不等于null时,直接返回对象,提高运行效率)if(instance==null){//同步代码块(对象未初始化时,使用同步代码块,保证多线程访问时对象在第一次创建后,不再重复被创建)synchronized (SingleTest.class){//未初始化,则初始instance变量if(instance==null)instance = new SingleTest();}}return instance;}}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息