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

3-2-Java多线程-案例-单例设计模式出现的问题

2016-11-20 22:28 357 查看

单例设计模式出现的问题

代码示例

class Demo implements Runnable{
public void run() {
Single.getInstance();
}
}


饿汉式

饿汉式多线程并发没有问题

class Single {
private static final Single SINGLE = new Single();
private Single(){}

public static  Single getInstance()
{
return SINGLE;
}
}


懒汉式

传统懒汉式并发状态下出现问题

class Single {
private static Single single = null;
private Single(){}
public static Single getInstance()
{
//所有的线程都可以并发进入此函数,进行此条件的判断
if (single == null)
{
return new Single();
}
return single;
}
}


加入同步后的懒汉式

class Single {
private static Single single = null;
private Single(){}
/**
* 并发访问会有安全隐患,所以加入同步机制,但是降低的效率
* @return
*/
public static /*synchronized*/ Single getInstance()
{
//所有的线程都可以并发进入此函数,进行此条件的判断
synchronized (Single.class)
{
if (single == null)
{
return new Single();
}
}
return single;
}
}


改进效率后的懒汉式

class Single {
private static Single single = null;
private Single(){}
/**
* 并发访问会有安全隐患,所以加入同步机制,但是降低的效率
* 解决方法如下:
* 可以通过双重判断的方式解决效率问题,减少判断锁的次数
* @return
*/
public static /*synchronized*/ Single getInstance()
{
//所有的线程都可以并发进入此函数,进行此条件的判断
if (single == null)
{
synchronized (Single.class)
{
if (single == null)
{
return new Single();
}
}
}
return single;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
相关文章推荐