单例模式:
抽象定义:顾名思义,就是只有一个实例。 作为对象的创建模式, 单例模式确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例。这个类称为单例类。
简介:很多人以为单例模式很简单,几行代码之内搞掂,其实这是比较2的。
Public class Test{
Privatestatic Test instance = null;
Public static TestgetInstance(){
If(instace == null)
instace = new Test();
return instance;
}
……….
……….
}
在没看设计模式之前,其实我自己也很2,自以为是很聪明,其实打错特错了。
请看以下分析就知道:
有些小聪明的人觉得,这还是不很简单的问题,自己加锁就OK啦,只需轻轻加上synchronized就收工了
Public class Test{
Privatestatic Test instance = null;
Public static synchronizedTest getInstance(){
If(instace == null)
instace = new Test();
return instance;
}
……….
……….
}
当然这也是一种解决方法,只是因为加锁的原因,每个时刻只能是单一线程来访问,假如很多很多线程同时访问,就只能在队列中慢慢等候了……
学问是永无止境的,其实有更加优雅的方法来解决这个问题----“双重检查加锁”
Public class Test{
Privatevolatile static Test instance;
Publicstatic Test getInstance(){
If(instance== null){
Synchronized(Test.class){
If(instance== null)
Instance= new Test();
}
}
Return instance;
}
}
到这里我们是不是觉得我们以前写代码弱爆,而且很多误区。