java的同步机制synchronize

需要注意的就是,java的syn关键字最终是由native的物理锁实现的。

使用syn关键字,我认为效率低下的原因,不仅仅是其他线程需要等待,而且是因为

第一、需要底层调用。这应该就是concurrent包出现的原因。

第二、其他线程在等待的时候,需要挂起和唤醒,这个挂起和唤醒的动作只有操作系统才能做。也就是需要操作系统的帮忙,也就是说程序需要从用户态转换为核心态。这就无疑加重了应用的负担。

concurrent包中的Lock与synchronized不同之处主要体现在Lock比synchronized更灵活得多,而这些灵活又主要体现在如下的几个方法:

//lock()
tryLock()
tryLock(long timeout, TimeUnit timeUnit)
lockInterruptibly()

//unlock()
这些都是ReentrantLock的内容。
A、trylock()方法:如果获取了锁立即返回true,如果别的线程正持有锁,立即返回false;
B、tryLock(long timeout, TimeUnittimeUnit)方法:如果获取了锁定立即返回true,如果别的线程正持有锁,会等待参数给定的时间,在等待的过程中,如果获取了锁定,就返回true,如果等待超时,返回false;
是不是比synchronized灵活就体现出来了,打个不是很恰当的比分:你现在正在忙于工作,突然感觉内急,于是你跑向洗手间,到门口发现一个“清洁中,暂停使用”的牌牌。没办法,工作又忙,所以你只好先放弃去洗手间回去忙工作,可能如此反复,终于你发现可以进了,于是......像这样的场景用synchronized你怎么实现?没办法,如果synchronized,当你发现洗手间无法暂时无法进入时,就只能乖乖在门口干等了。


线程同步机制的jvm实现如下:

http://hi.baidu.com/quest2run/blog/item/7e9c8b8326052cd99023d955.html

实现自己的读写锁:

http://rttmmr.blog.163.com/blog/static/3160078120071045586576/

http://www.cnblogs.com/GnagWang/archive/2011/02/27/1966606.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值