【黑马程序员】java中-------------------单例设计模式
来源:互联网 发布:知乎女朋友是校花 编辑:程序博客网 时间:2024/05/16 16:21
---------------------- <a href="http://edu.csdn.net"target="blank">ASP.Net+Android+IOS开发</a>、<a href="http://edu.csdn.net"target="blank">.Net培训</a>、期待与您交流! ----------------------
Java单例设计模式
一. 定义:
1. 设计一个类,这个类确保只能有一个实例对象,在内存中只存在一个对象,而且向整个系统提供这个对象,成为单例设计模式。
2.如何保证对象唯一性?
a.将构造方法私有化,这样外部就不能使用构造方法new对象了。
b.在类中创建一个本类对象,为了防止外部访问使用这个对象,必须将构造函数私有化。
c. 提供一个静态方法让外部可以通过这个方法获得到本类这个自定义的对象。
3. 懒汉式和饿汉式
饿汉式(此时的对象是随着类加载而加载)
单例设计模式,保证对象的唯一性;
两种方式:1,懒汉式 2,饿汉式
1 class Student{private Student(){}prevate Student s=new Student();pribulic static Student getStudent(){return s;}}2 class Single{ prevate Single(){}private static Single getInstance(){if(s==null)s=new Single();return s; }}4.多线程中的安全问题
我们发现当一个线程方法时,是没有任何问题,但是多个线程发生并发访问就存在问题了。
假如线程1判断完if(s == null)之后就被CPU切换到另一个线程,线程执行,进来也做完了if(s == null)判断,
此时线程1得到了CPU的执行权,就去new了一个对象,然后线程2也new了一个新的对象,
所以懒汉式的对象延迟加载导致了多线程并发访问产生多个不同对象的问题发生。所以既然是考虑到多线程,
当然我们就要用到多线程同步语句去控制并发访问了。
解决方法:加上同步代码块和双重判断class Student{private Student(){}private Student s=new Student();public static Student getStudent(){if(s==null){synchronized(student.class){if(s==null){s=new Student();}}}return s;}}
5、在实际开发中,建议使用饿汉式,因为在开发中,要用到单例设计模式的话,对象不管怎么样都是要建立的
而且在饿汉式中,没有线程安全问题,效率要比懒汉式高些
---------------------- <a href="http://edu.csdn.net"target="blank">ASP.Net+Android+IOS开发</a>、<a href="http://edu.csdn.net"target="blank">.Net培训</a>、期待与您交流! ----------------------
- 【黑马程序员】java中-------------------单例设计模式
- 黑马程序员---单例设计模式【java】
- 黑马程序员-Java单例设计模式
- 黑马程序员----java单例设计模式
- 黑马程序员--java单例设计模式
- 黑马程序员-java单例设计模式
- 黑马程序员--java 单例设计模式
- 黑马程序员---java单例设计模式
- 黑马程序员-java设计模式之单例模式
- 黑马程序员-Java设计模式之单例模式解析
- 《黑马程序员》java笔记->【03】单例设计模式
- 黑马程序员JAVA基础-单例设计模式
- 黑马程序员------java学习笔记之单例设计模式
- 黑马程序员:Java基础总结----单例设计模式
- 黑马程序员 Java(三)>单例设计模式<
- 黑马程序员 知识点总结-Java单例设计模式
- 黑马程序员-------Java基础之单例设计模式
- 黑马程序员 java基础—单例设计模式
- velocity模板语言之变量的赋值与使用区别小论
- 3.6 lseek函数-文件读写定位
- C# 利用TCP/IP协议发送图片文件,并显示
- 把任何文件变成图片
- Android 4.2 关于GlowPadView的说明
- 【黑马程序员】java中-------------------单例设计模式
- URL中转码问题
- Vim的分割窗口split命令
- 二叉树前序遍历 中序遍历 后续遍历 算法实现
- Android Mms专题之:Mms源码结构
- IOS 启动画面和图标设置(适配IOS7 and Xcode5)
- android中dip、dp、px、sp和屏幕密度
- PHP中HTML实体编码函数
- html页面出现404错误