您的位置:首页 > 编程语言 > Java开发

java单件模式

2014-03-04 21:11 218 查看
单件模式:就是一个类只有一个实例,并提供一个全局访问点。
单件模式浅显易懂,一般的实现形式如下所示:public class Earth {
private static Earth uniEarth;
public static Earth getInstance(){
if(uniEarth == null){
uniEarth = new Earth();
}
return uniEarth;
}
}

但是在多个线程操作的情况下,该方法显然有问题;比如:线程1执行到if语句的时候,跳出线程执行线程2的时候,那么就会出现错误。
一般有三种解决方法:
方法一:
public static synchronized Earth getInstance(){}

对方法加锁,但是会降低性能//同一个方法可能会造成程序的执行效率下降100倍,因此如果getInstance()使用频繁的时候,就尽量避免该做法;
方法二:
public class Earth {
private static Earth uniEarth = Earth();
public static Earth getInstance(){
return uniEarth;
}
}

如果应用程序总是要创建该单间实例或者创建或运行时的负担不太繁重,可以在jvm加载类的时候马上创建此唯一的单件实例。
方法三:
用“双重检查加锁”,在getInstance()中减少使用同步,这样的话,只有第一次会同步。
public class Earth {
private volatile static Earth uniEarth;
public static Earth getInstance(){
if(uniEarth == null){
synchronized(Earth.class){
uniEarth = new Earth();
}
}
return uniEarth;
}
}

volatile关键字:保证线程从对象的引用找到对应在堆内存的变量的值是最新的哈;详细的介绍可以查看转载的java中volatile关键字的解析博客;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: