首页 > 编程语言 > 详细

Singleton模式(Java)

时间:2015-03-26 17:44:31      阅读:224      评论:0      收藏:0      [点我收藏+]
<span style="color: rgb(0, 176, 240); font-family: 黑体; mso-bidi-font-size: 10.0pt; mso-bidi-font-family: Consolas; mso-font-kerning: 0pt;"><span style="font-size:12px;">《剑指<span lang="EN-US">Offer</span>》<span lang="EN-US"><span style="font-size:14px;">P31</span></span></span></span><span style="font-family:宋体;font-size:14px;">
</span>
/*************实现单键模式Singleton*************/

public class Singleton
{
	/*
	简单实现方式一,不适合在多线程环境下使用
	*/
	public class Singleton1
	{
		//创建instance实例
		private static Singleton1 instance;
		//构造函数设为private,即外界不可访问的
		private Singleton1()
		{
		}
		
		//注意不能由构造函数创建对象,故只能使用类方法进行外界访问
		public static Singleton1 getInstance()
		{
			if(instance == null)/*这里多环境下判断则容易出错,比如一个线程判断为null时,还未执行创建实例
			                        另一个线程即立刻进行判断,此时结果仍为null,运行结果则会创建两个实例*/
			{
				instance = new Singleton1();
			}
			return instance;
		}
	}
	
	/*实现方法二,使用Lock锁方式*/
	public  final class Singleton
	{
		private static Singleton instance;
		//设置锁
		private static Lock mylock = new ReentrantLock();
		private Singleton()
		{
			
		}
		
		public static Singleton getInstance()
		{
			mylock.lock();
			try
			{
				if(instance == null)
				{
					instance = new Singleton();
				}
				return instance;
			}
			finally
			{
				mylock.unlock();//注意一定要在finally块中解锁
			}
		}
	}
	
	/*实现方法三:由于上述每一次获取instance时都需要获取锁,花费时间过大,则这里适当做了优化,即只有第一次
	  创建才进行判断*/
	public final class Singleton3
	{
		private static Singleton3 instance;
		//设置锁
		private static Lock mylock = new ReentrantLock();
		private Singleton3()
		{
			
		}
		
		public static Singleton3 getInstance()
		{
			
			if(instance == null)
			{
				mylock.lock();//只有instance为null时,才立即上锁
				try
				{
					if(instance == null)//注意这里要进行第二次判断
					{
						instance = new Singleton3();
					}
				}
				finally
				{
					mylock.unlock();//注意一定要在finally块中解锁
				}
			}
			return instance;	
		}
	}
	
	/*实现方法五*/
	public final class Singleton4
	{
		private static Singleton4 instance = new Singleton4();//立即初始化,但这样较浪费资源
		private Singleton4()
		{
			
		}
		
		public static Singleton4 getInstance()
		{
			return instance;
		}
	}
	
	/*实现方法六*/
	public final class Singleton6
	{
		private Singleton6()
		{
			
		}
		
		public static Singleton6 getInstacne()
		{
			return Inner.instance;
		}
		
		private static class Inner
		{
			 final static Singleton6 instance = new Singleton6();
		}
		
	}
	
	
	
	
	
	public static void main(String[] args)
	{
		
	}
	
}



Singleton模式(Java)

原文:http://blog.csdn.net/woliuyunyicai/article/details/44651581

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!