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单例五种实现模式 饿汉式(线程安全,调用效率高,但是不能延时加载) 一上来就把单例对象创建出来了,要用的时候直接返回即可,这种可以说是单例模式中最简单的一种实现方式.但是问题也比较明显.单例在 ...
随机推荐
- mac itunes ios 7 升级 出现 this device isn't eligible for the requested build
今天在对我的iPod 进行iOS7 升级的时候(在mac iTunes 上进行的),一直弹出框提示 解决办法就是 1. 打开HOSTS (Mac 下路径为:/etc/hosts, 至于怎么打开host ...
- 怎样解决xcode里开发cocos2dx改动lua脚本后不刷新的问题
用xcode来开发cocos2dx,结果发现一个非常纠结的问题,假设我一旦改动了一个Lua文件,我必须clean之后再build,否则改动的Lua文件不会体现出来.这是一个非常令纠结的结果,特别是我要 ...
- Oracle EBS使用adpatch工具打patch过程【Z】
Oracle EBS使用adpatch工具打patch过程 从Metalink下载补丁 登陆到Metalink(https://support.oracle.com),Oracle内部用户可以使用AR ...
- C#XML操作详解
添加引用 using System.Xml; 创建XML文件 XmlDocument xmldoc=new XmlDocument(); //加入XML的声明段落:<?xmlversion=& ...
- 为什么析构函数要加visual?
一般来说,有使用visual的类,其析构函数都需要加上visual,这是为什么呢? 因为使用多态时,一般都是由基类指针来使用派生类的,在删除这个派生类对象时也一样,由基类指针来调用, 可以想象,如果析 ...
- (转载)JS中的prototype
原文地址:http://www.cnblogs.com/yjf512/archive/2011/06/03/2071914.html#!comments JS中的phototype是JS中比较难理解的 ...
- mysql学习笔记--第1天
1.像网页上的账户.图片.文章都是存在数据库里面2.Oracle .DB2 .SQL server等等多钟数据库 PHP中选择使用mysql PHP+mysql黄金搭档 PHP和mysql都是开源的, ...
- scss + react + webpack + es6
scss + react + webpack + es6 写在前面: 刚学习完慕课网里的一个幻灯片案例,自己加了刚学的react,两者结合.首先让大家看看效果 点击此处 你可以先用纯js实现上面的效果 ...
- JS---DOM概述
DOM DOM:文档对象模型document object model DOM三层模型: DOM1:将HTML文档封装成对象 DOM2:将XML文档封装成对象 DOM3:将XML文档封装成对象 DOM ...
- Oracle EBS-SQL (SYS-19):sys-用户登陆纪录查询.sql
select * from fnd_user t where t.user_name='user_name'