Java中单例七种写法(懒汉、恶汉、静态内部类、双重检验锁、枚举)
/***
* 懒汉模式 1
* 可以延迟加载,但线程不安全。
* @author admin
*
*/
public class TestSinleton1 {
private static TestSinleton1 sinleton;
private TestSinleton1(){ }
public static TestSinleton1 getSinleton(){
if(sinleton==null){
return new TestSinleton1();
}
return sinleton;
}
}
/***
* 懒汉模式变种 2
* @author admin
* 使用了synchronized关键字,既可以延迟加载,又线程安全,但是执行效率低。
*/
class TestSinleton2{
private static TestSinleton2 sinleton;
private TestSinleton2(){ }
public synchronized static TestSinleton2 getSinleton(){
if(sinleton==null){
return new TestSinleton2();
}
return sinleton;
}
}
/***
* 饿汉模式 3
* @author admin
* 基于classload机制,静态变量在类装载时进行初始化
* 可以避免线程安全问题,但是没有延迟加载。
*/
class TestSinleton3{
private static TestSinleton3 sinleton = new TestSinleton3();
private TestSinleton3(){
}
public static TestSinleton3 getSinleton(){
return sinleton;
}
}
/***
* 恶汉变种模式 4
* @author admin
* 基于静态 代码块,在实例化或者第一次调用时执行
* 既可以延迟加载,又线程安全
*/
class TestSinleton4{
private static TestSinleton4 sinleton =null;
static{
sinleton = new TestSinleton4();
}
public static TestSinleton4 getSinleton(){
return sinleton;
}
}
/***
* 双重校验锁 5
* @author admin
* 懒汉模式的优化版,拥有线程安全、高效率以及延迟加载等特性。但是这种方式需要jdk1.5以上,且在一些平台和编译器下有错。
*/
class TestSinleton5{
private static volatile TestSinleton5 sinleton;
private TestSinleton5(){ }
public static TestSinleton5 getSinleton(){
if(sinleton==null){
synchronized (TestSinleton5.class) {
if(sinleton==null){ sinleton = new TestSinleton5();
}
}
}
return sinleton;
}
}
/***
* 静态内部类 6
* @author admin
* 恶汉模式的优化版,在类被装载时,静态内部类并没有被实例化,
* 只有getInstance()时才 会装载 SingletonHolder 类,静态内部类方式也能很好地,实现线程安全、高效率和延迟加载特性。
*/
class TestSinleton6{
private static class SingletonHolder {
private static final TestSinleton6 sinleton = new TestSinleton6();
}
private TestSinleton6(){}
public static final TestSinleton6 getSinleton(){
return SingletonHolder.sinleton;
} }
/***
* 枚举7
* @author admin
*避免多线程同步问题
*/
enum TestSinleton7 {
SINLETON;
}
Java中单例七种写法(懒汉、恶汉、静态内部类、双重检验锁、枚举)的更多相关文章
- Java 单例模式的七种写法
Java 单例模式的七种写法 第一种(懒汉,线程不安全) public class Singleton { private static Singleton instance; private Sin ...
- Java:单例模式的七种写法(转载)
第一种(懒汉,线程不安全): package Singleton; /** * @echo 2013-10-10 懒汉 线程不安全 */ public class Singleton1 { priva ...
- Java:单例模式的七种写法[转]
第一种(懒汉,线程不安全): 1 public class Singleton { 2 private static Singleton instance; 3 privat ...
- 【JAVA学习】单例模式的七种写法
尊重版权:http://cantellow.iteye.com/blog/838473 第一种(懒汉.线程不安全): Java代码 public class Singleton { private ...
- Java:单例模式的七种写法<转>
第一种(懒汉,线程不安全): 1 public class Singleton { 2 private static Singleton instance; 3 privat ...
- 温故而知新(java实现)单例模式的七种写法
第一种(懒汉,线程不安全): Java代码 public class Singleton { private static Singleton instance; private Singleton ...
- Java设计模式之单例模式(七种写法)
Java设计模式之单例模式(七种写法) 第一种,懒汉式,lazy初始化,线程不安全,多线程中无法工作: public class Singleton { private static Singleto ...
- 单例模式:Java单例模式的几种写法及它们的优缺点
总结下Java单例模式的几种写法: 1. 饿汉式 public class Singleton { private static Singleton instance = new Singleton( ...
- java单例五种实现模式梳理
java单例五种实现模式 饿汉式(线程安全,调用效率高,但是不能延时加载) 一上来就把单例对象创建出来了,要用的时候直接返回即可,这种可以说是单例模式中最简单的一种实现方式.但是问题也比较明显.单例在 ...
随机推荐
- nginx源代码分析--配置文件解析
ngx-conf-parsing 对 Nginx 配置文件的一些认识: 配置指令具有作用域,分为全局作用域和使用 {} 创建其他作用域. 同一作用域的不同的配置指令没有先后顺序:同一作用域能否使用同样 ...
- 9大理由告诉你为什么应该学习HTML跟CSS
你是不是听过太多人告诉你:「人人都应该要会 coding!」都快要不耐烦了对吧? 究竟为什么身为一个行销专业者.作家.金融巨擘--,整个世界还要你学会 coding? 事实上仅仅要对 HTML.CSS ...
- java 泛型深入之Set有用工具 各种集合泛型深入使用演示样例,匿名内部类、内部类应用于泛型探讨
java 泛型深入之Set有用工具 各种集合泛型深入使用演示样例,匿名内部类.内部类应用于泛型探讨 //Sets.java package org.rui.generics.set; import j ...
- 简单实现仿UITabBarController界面
第一步:添加两个占位View 第二步:添加子控制器 第三步:添加按钮 #import "ViewController.h" #define SCREEN_WIDTH ([UIScr ...
- 为SharePoint 2010中的FBA创建自定义登录页面
SharePoint 2010中默认的FBA登录页面非常简单,只提供了一个Asp.Net的Login控件,让用户输入用户名和密码.在大多数情况下,我们需要定制这个页面以满足一些安全需求,比如为登录页面 ...
- C++ Primer 读书笔记: 第8章 标准IO库
第8章 标准IO库 8.1 面向对象的标准库 1. IO类型在三个独立的头文件中定义:iostream定义读写控制窗口的类型,fstream定义读写已命名文件的类型,而sstream所定义的类型则用于 ...
- PyCharm 2016.1 for Mac 激活方法分享
内容如题,需要就参考一下,不需要请绕行!内容来自墙外我只是搬运工! 简单介绍一下步骤: 1.下载下面的压缩包并解压下来. http://files.cnblogs.com/files/korykim/ ...
- MiniSD卡是什么
Mini SD卡比目前主流的普通SD卡(如DC或DV上使用的SD卡),在外形上更加小巧,重量仅有3克左右,体积只有21.5x20x1.4mm,比普通SD卡足足节省了60%的空间.别小看这么小的外形,它 ...
- 如何在程序中动态设置墙纸(使用IActiveDesktop接口)
大家都知道设置WINDOWS桌面墙纸的WIN32 API是SystemParametersInfo, 使用SPI_SETDESKWALLPAPER参数便能设置墙纸: ::SystemParameter ...
- Delphi 编码转换 Unicode gbk big5(使用LCMapString设置区域后,再用API转换)
原文:http://blog.dream4dev.com/article.asp?id=17 function UnicodeEncode(Str: string; CodePage: integer ...