论坛首页 入门技术论坛

Java同步锁一个技巧

浏览 14447 次
该帖已经被评为新手帖
作者 正文
   发表时间:2010-02-01  
neptune 写道
hommy8 写道
这里重点不在双锁机制,而是锁的粒度...的确应该如LZ说的,锁的粒度达到了最小化了



还有锁的粒度跟小的你信不信?

ls的来一个例子让大家看看
0 请登录后投票
   发表时间:2010-02-01   最后修改:2010-02-01
加一个object只是多一个信号量而已,如果你有很多信号量这样实现会很不方便,我记得conurrent包里可以使用condition接口来实现你这种情况。

感觉这个代码都是concurrent包出来之前写的, tomcat中也有类似代码。因为一个monitor不够用。
0 请登录后投票
   发表时间:2010-02-02  
raymond2006k 写道

if (fastClassInfo == null)
{
    synchronized (initLock)
    {
        if (fastClassInfo == null)
        {
            CreateInfo ci = createInfo;

            FastClassInfo fci = new FastClassInfo();
           .................
            fastClassInfo = fci;
        }
    }
}


不会有所谓的“双检锁”问题吗?
有的人又说java虚拟可以处理了双检锁问题了,疑惑中……
0 请登录后投票
   发表时间:2010-03-28  
超级潜水艇 写道
Mybeautiful 写道
超级潜水艇 写道
。。。。。。
平常大家直接用在方法上的synchronized 实际上是锁定这个类。 )

锁定的不是这个类,是这个类当前的对象。

怪我说法不科学。。
静态方法上加synchronized 锁定该类。
实例方法上加synchronized 锁定该实例。


对不起,我想在罗嗦一下,虽然我们都了解其意思,但是有必要对概率进行澄清。

“静态方法上加synchronized 锁定该类。”这句话有待探讨,类是个静态的概念,程序运行起来后没有类,只有对象。 所以这种情况到底锁的是哪个对象,还真不太好表述。就是运行时的 ClassName.class 或 object.getClass()  这个对象吧.
0 请登录后投票
   发表时间:2010-03-30  
很明确的说一句,双锁机制也不是完全可靠.
0 请登录后投票
   发表时间:2010-03-30  
千万不要锁this.
0 请登录后投票
   发表时间:2010-03-30  
double lock在java里是失效的。
http://www.cs.umd.edu/~pugh/java/memoryModel/DoubleCheckedLocking.html
0 请登录后投票
   发表时间:2010-03-30  
扯淡帖,不存储数据就变成锁粒度更小了?synchronized(this)跟你专门搞个object来用没有本质区别,都是对象锁。
0 请登录后投票
   发表时间:2010-03-30  
linkerlin 写道
double lock在java里是失效的。
http://www.cs.umd.edu/~pugh/java/memoryModel/DoubleCheckedLocking.html


你仔细看完这篇文章的话就知道java1.5之后double check locking是没有问题的
0 请登录后投票
   发表时间:2010-03-30  
即使是java 1.5也是要用volatile的。
0 请登录后投票
论坛首页 入门技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics