Java同步锁一个技巧

Synchronized 同步
Java5开始虽然引入了高效的 Concurrent 并发包,但同步 synchroize 在一些场合还是需要使用的。
比较典型和我们通常的做法是对某个类成员变量加同步锁,这个变量一般是存储关键数据的。

但许多开源框架中有下面的用法, 例如:
[b]Cglib 中的 MethodProxy :[/b]

package net.sf.cglib.proxy;
public class MethodProxy {
private Signature sig1;
private Signature sig2;
private final Object initLock = new Object();

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

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


大家不用关心MethodProxy 是做什么的,只需关注 private final Object initLock = new Object();
其中,initLock 对象不用来存储数据,而仅仅用来做同步锁对象,这样可以较小锁的粒度,非常高效。
因此, synchronized(this), synchroniezd( 存储用成员变量) 都可以替换为这个模式。

JDK 源码中也有很多这样的模式的范例可以参考。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值