锁定老帖子 主题:Java同步锁一个技巧
该帖已经被评为新手帖
|
|
---|---|
作者 | 正文 |
发表时间:2010-02-01
neptune 写道 hommy8 写道 这里重点不在双锁机制,而是锁的粒度...的确应该如LZ说的,锁的粒度达到了最小化了
还有锁的粒度跟小的你信不信? ls的来一个例子让大家看看 |
|
返回顶楼 | |
发表时间:2010-02-01
最后修改:2010-02-01
加一个object只是多一个信号量而已,如果你有很多信号量这样实现会很不方便,我记得conurrent包里可以使用condition接口来实现你这种情况。
感觉这个代码都是concurrent包出来之前写的, tomcat中也有类似代码。因为一个monitor不够用。 |
|
返回顶楼 | |
发表时间:2010-02-02
raymond2006k 写道 if (fastClassInfo == null) { synchronized (initLock) { if (fastClassInfo == null) { CreateInfo ci = createInfo; FastClassInfo fci = new FastClassInfo(); ................. fastClassInfo = fci; } } } 不会有所谓的“双检锁”问题吗? 有的人又说java虚拟可以处理了双检锁问题了,疑惑中…… |
|
返回顶楼 | |
发表时间:2010-03-28
超级潜水艇 写道 Mybeautiful 写道 超级潜水艇 写道 。。。。。。
平常大家直接用在方法上的synchronized 实际上是锁定这个类。 ) 锁定的不是这个类,是这个类当前的对象。 怪我说法不科学。。 静态方法上加synchronized 锁定该类。 实例方法上加synchronized 锁定该实例。 对不起,我想在罗嗦一下,虽然我们都了解其意思,但是有必要对概率进行澄清。 “静态方法上加synchronized 锁定该类。”这句话有待探讨,类是个静态的概念,程序运行起来后没有类,只有对象。 所以这种情况到底锁的是哪个对象,还真不太好表述。就是运行时的 ClassName.class 或 object.getClass() 这个对象吧. |
|
返回顶楼 | |
发表时间:2010-03-30
很明确的说一句,双锁机制也不是完全可靠.
|
|
返回顶楼 | |
发表时间:2010-03-30
千万不要锁this.
|
|
返回顶楼 | |
发表时间:2010-03-30
double lock在java里是失效的。
http://www.cs.umd.edu/~pugh/java/memoryModel/DoubleCheckedLocking.html |
|
返回顶楼 | |
发表时间:2010-03-30
扯淡帖,不存储数据就变成锁粒度更小了?synchronized(this)跟你专门搞个object来用没有本质区别,都是对象锁。
|
|
返回顶楼 | |
发表时间:2010-03-30
linkerlin 写道 double lock在java里是失效的。
http://www.cs.umd.edu/~pugh/java/memoryModel/DoubleCheckedLocking.html 你仔细看完这篇文章的话就知道java1.5之后double check locking是没有问题的 |
|
返回顶楼 | |
发表时间:2010-03-30
即使是java 1.5也是要用volatile的。
|
|
返回顶楼 | |