黑马程序员技术交流社区
标题:
线程并发访问问题
[打印本页]
作者:
陈苓
时间:
2012-4-11 01:08
标题:
线程并发访问问题
class Single{
private static final s = null;
private Single(){}
public static void getInstance(){
if(s==null) //
这里要多加一次判断,这里的判断目的也有点模糊
synchronized(Slingle.class)
if(s==null)//
这里判断的时候,如果有多条线程,一线程进来出去之后其他的的线程进进步来,怎么有点模糊
{
s = new Single();
}
return s;
}
}
该贴已经同步到
格式化的微博
作者:
陈苓
时间:
2012-4-11 01:09
class Single{
private static final s = null;
private Single(){}
public static void getInstance(){
if(s==null) //这里要多加一次判断,这里的判断目的也有点模糊
synchronized(Slingle.class)
if(s==null)//这里判断的时候,如果有多条线程,一线程进来出去之后其他的的线程进进步来,怎么有点模糊 {
s = new Single();
}
return s;
}
}
上面没有换行,不好看
作者:
未长法
时间:
2012-4-11 08:38
class Single{
private static final s = null;
private Single(){}
public static void getInstance(){
if(s==null) //这里要多加一次判断,这里的判断目的判断进来的线程是否为空
synchronized(Slingle.class)
if(s==null)//这里判断的时候,如果有多条线程,一线程进来出去之后其他的的线程如果想进来得先判断锁
{
A------>
s = new Single();
}
return s;
}
}
这样双重判断,首先如果一个线程A进来了,判断为空,那么进来判断也满足条件 A线程如图 ,,这时又进来一个B线程进来,判断s==null,所以 进来,因为有锁,进不去,然后线程A new了一个对象然后出去了,这时线程B 进去了,再次判断s==null,不满足条件,因此进不去。此时如果在来一个C线程先判断第一个s==null,就不满足条件,所以不用判断锁。减少了判断锁的次数,提高了懒汉式的效率。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2