sychronized JVM内置同步方法,当代码块或加锁方法程序执行完会自动释放,不管是加载在代码块还是静态方法或者实例方法,其本质是加载在对象的锁!
1加载代码块的锁范围较小,效率更高
2静态方法相当于加锁在类对象,其他线程需要获得锁,必须等加在类对象的锁释放,只要该线程持续在当前方法内运行,其他线程依然无法获得方法的使用权
3加在实例方法上,相当于加载在this上,即实例对象,仅对类的同一实例对象有互斥作用
lock 是用程序实现的一同步接口,ReentrantLock是唯一实现该接口的,具有trylock 机制,即获取锁时候可以返回是否得到该锁的回调,返回false,即放弃,线程不会放入等待池中,synchronized的话线程会待在等待池中,lock 的话,在试图获得锁的线程有中断操作!lock 不能自动释放锁操作,必须在finally释放锁 unlock
在并发量比较小的情况下,使用synchronized是个不错的选择,但是在并发量比较高的情况下,其性能下降很严重,此时ReentrantLock是个不错的方案。
网友评论