java 中单利的写法

package com.VD.bean.com.VD.dataBase;

/**
* Created by vd on 2017/2/22.
*/
public class UtilDataBaseTools
{
public UtilDataBaseTools()
{

}
}

// java 单例的实现模式

class ShareInstance extends Object
{
private static final long serialVersionUID = 100L;
private static ShareInstance instance = new ShareInstance();
/*
* 单例模式
*
*
* */
private ShareInstance()
{

}

public static ShareInstance getInstance()
{


return instance;
}
//方法一就是传说的中的饿汉模式
//优点是:写起来比较简单,而且不存在多线程同步问题,避免了synchronized所造成的性能问题;
//缺点是:当类ShareInstance被加载的时候,会初始化static的instance,
// 静态变量被创建并分配内存空间,从这以后,这个static的instance对象便一直占着这段内存
// (即便你还没有用到这个实例),
// 当类被卸载时,静态变量被摧毁,并释放所占有的内存,因此在某些特定条件下会耗费内存。


public static ShareInstance getInstanceMethods()
{
if(instance==null)
{
instance = [new ShareInstance];
}
return instance;
}
//方法二就是传说的中的饱汉模式
//优点是:写起来比较简单,当类SingletonTest被加载的时候,
// 静态变量static的instance未被创建并分配内存空间,
// 当getInstance方法第一次被调用时,初始化instance变量,
//
// 并分配内存,因此在某些特定条件下会节约了内存;
//缺点是:并发环境下很可能出现多个SingletonTest实例。

// 定义一个静态的方法(调用时再初始化SingletonTest,使用synchronized 避免多线程访问时,可能造成重的复初始化问题)
public static synchronized ShareInstance getInstanceMehodSynchronized()
{
if (instance == null)
instance = new ShareInstance();
return instance;
}

//方法三为方法二的简单优化
//优点是:使用synchronized关键字避免多线程访问时,出现多个SingletonTest实例。
//缺点是:同步方法频繁调用时,效率略低。
//定义一个共有的静态方法,返回该类型实例
public static ShareInstance getIstance() {
// 对象实例化时与否判断(不使用同步代码块,instance不等于null时,直接返回对象,提高运行效率)
if (instance == null) {
//同步代码块(对象未初始化时,使用同步代码块,保证多线程访问时对象在第一次创建后,不再重复被创建)
synchronized (ShareInstance.class) {
//未初始化,则初始instance变量
if (instance == null) {
instance = new ShareInstance();
}
}
}
return instance;
}
//方法四为单例模式的最佳实现。内存占用低,效率高,线程安全,多线程操作原子性。



}
posted @ 2017-02-22 20:22  tiankongzhicheng  阅读(235)  评论(0编辑  收藏  举报