黑马程序员-Java基础-多线程之单例模式总结
来源:互联网 发布:matlab数据相关性分析 编辑:程序博客网 时间:2024/04/30 11:35
Singleton模式主要作用是保证在Java应用程序中,一个类Class只有一个实例存在。
一般Singleton模式通常有几种种形式,第一种形式: 定义一个类,它的构造函数为private的,它有一个static的private的该类变量,在类初始化时实例话,通过一个public的getInstance方法获取对它的引用,继而调用其中的方法。
public class Singleton {
private Singleton(){}
//在自己内部定义自己一个实例
//注意这是private 只供内部调用
private static Singleton instance = newSingleton();
//这里提供了一个供外部访问本class的静态方法,可以直接访问
public static Singleton getInstance() {
return instance;
}
}
第二种形式:
public class Singleton {
privatestatic Singleton instance = null;
publicstatic synchronized Singleton getInstance() {
//这个方法比上面有所改进,不用每次都进行生成对象,只是第一次
//使用时生成实例,提高了效率!
if(instance==null)
instance=new Singleton();
return instance; }
}
其他形式:
定义一个类,它的构造函数为private的,所有方法为static的。
一般认为第一种形式要更加安全些。
package blog.Javase.Thread;/** * 单例模式有两种写法: * 1、饿汉式:创建实例的同时,在内存中开辟空间。 * 2、懒汉式:创建实例时,先不创建空间,使用时才去开辟空间。 * @author kevin * @version v1.1 */public class SingletonDemo {public static void main(String[] args) {System.out.println("Singleton Instance");}}/* * 实现方式一:饿汉式 * 它的特点是实现简单,实例创建时即初始化并开辟空间, * 多线程调用时不会产生安全性问题,因为方法中只有一条return语句。 */class Single { private static final Single instance = new Single(); private Single() {} public static Single getInstance() { return instance; } }/* * 实现方式二:懒汉式 * 它的特点是:先创建实例,但是不开辟空间,当对象调用时才去初始化并开辟空间,使用了延迟加载; * 在函数中语句较多,多线程访问时会出现线程安全性问题。*/class Single2{ private static Single2 s = null; private Single2(){} public static synchronized Single2 getInstance() { if(s == null) s = new Single2(); return s; } }//面试中常考的单例模式,懒汉模式改进class Single3{/* * 懒汉式每次都要判断锁,占用了资源,为了提高效率,使用同步块改进. * * 懒汉式和饿汉式有什么不同呢?: * 懒汉式的特点在于采用了实例的延迟加载; * 延迟加载在多线程访问时会产生安全性问题; * 可以加同步来解决; * 同步函数和同步代码块都可以解决安全性问题,但是同步函数稍微有些低效, * 用双重判断的形式能解决效率问题。 * 同步代码块在静态方法中使用的琐是该类所属的字节码文件对象。 */ private static Single3 s = null; private Single3(){} public static Single3 getInstance() { if(s == null) { synchronized(Single3.class) { if(s == null) s = new Single3(); } } return s; } }
- 黑马程序员-Java基础-多线程之单例模式总结
- 黑马程序员--Java基础--多线程创建及单例模式
- 黑马程序员-基础学习总结之单例设计模式
- 黑马程序员:Java基础总结----单例设计模式
- 黑马程序员-------Java基础之单例设计模式
- 黑马程序员-JAVA基础之单例设计模式
- 黑马程序员----java基础之单例设计模式
- 黑马程序员---JAVA基础JAVA23种设计模式之---单例设计模式
- 黑马程序员-[JAVA基础]-23种设计模式之单例设计模式
- 黑马程序员 多线程 单例设计模式
- 黑马程序员JAVA基础-单例设计模式
- 黑马程序员 java基础—单例设计模式
- 【黑马程序员】java基础_单例设计模式
- 黑马程序员-->Java基础-->单例设计模式
- 黑马程序员——Java基础-- 单例模式
- 黑马程序员—java基础学习--单例设计模式
- 黑马程序员--java基础--线程,单例设计模式
- 黑马程序员——Java基础->单例设计模式
- Linux里的lsb_release
- Thinking in Java 读书笔记-初始化与清理
- CScrollView的使用 .
- ASp.net 剖析三层架构
- Android webView 使用back功能返回以前浏览过的页面
- 黑马程序员-Java基础-多线程之单例模式总结
- Java中文简单排序
- NSTimer
- android UI设计的一些心得与问题解决
- SQL Server 将表中数据,转化成SQL Insert语句
- [Android源码分析]蓝牙打开分析--苦尽甘来之再次回到jni之上
- The coproc keyword
- 基于Hadoop 2.2.0的高可用性集群搭建步骤(64位)
- 使用paint画图应加上super.paint(g)