纯文学程序员首页投稿(暂停使用,暂停投稿)

java 多线程,高并发变成之二 sychronized 和 l

2017-10-17  本文已影响29人  青城楼主

sychronized  JVM内置同步方法,当代码块或加锁方法程序执行完会自动释放,不管是加载在代码块还是静态方法或者实例方法,其本质是加载在对象的锁!

1加载代码块的锁范围较小,效率更高

2静态方法相当于加锁在类对象,其他线程需要获得锁,必须等加在类对象的锁释放,只要该线程持续在当前方法内运行,其他线程依然无法获得方法的使用权

3加在实例方法上,相当于加载在this上,即实例对象,仅对类的同一实例对象有互斥作用

lock 是用程序实现的一同步接口,ReentrantLock是唯一实现该接口的,具有trylock 机制,即获取锁时候可以返回是否得到该锁的回调,返回false,即放弃,线程不会放入等待池中,synchronized的话线程会待在等待池中,lock 的话,在试图获得锁的线程有中断操作!lock 不能自动释放锁操作,必须在finally释放锁  unlock

在并发量比较小的情况下,使用synchronized是个不错的选择,但是在并发量比较高的情况下,其性能下降很严重,此时ReentrantLock是个不错的方案。

上一篇 下一篇

猜你喜欢

热点阅读