同步之Synchronized与ReentrantLock的区别 栈上逃逸技术

相比Synchronized,ReentrantLock主要增加了三个条件:等待可中断,可实现公平锁和锁绑定多个条件

1.等待可中断是指当前持有锁的线程长期不释放锁的时候,正在等待的线程可以选择放弃等待,改为处理其他事情,可中断特性对处理执行时间非常长的同步块很有帮助

2.公平锁指多个线程在等待同一个锁时,必须按照申请锁的时间顺序来依次获得锁,而非公平锁则不保证这一点,在锁被释放时,任何一个等待的线程都有可能获得锁,synchronized的锁是非公平的,ReentrantLock默认情况下也是非公平的,但可以通过带布尔值的构造函数要求使用公平锁

3.锁绑定条件是指一个ReentrantLock对象可以同时绑定多个Condition对象,实现选择性通知

==========================================================================================

逃逸分析:当一个对象在方法中被定义后,它可能被外部方法所引用,例如作为调用参数传递到其他方法中,称为方法逃逸,甚至可以被外部线程访问,称为线程逃逸,如果能证明这个对象只在方法内部使用,就可以对这个变量进行高效的优化。

优化策略:

1. 栈上分配:对象在栈上分配,对象随着栈帧的结束而销毁,缓解了垃圾回收器的压力

2.同步消除:如果确定该对象不会有多线程同步问题,那么在该对象上的同步就可以消除

3.标量替换:标量是指一个数据无法再分解成更小的数据了,对象分解成基本组成成分,那么将不会创建这个对象,仅仅使用对象的基本组成,栈区分配

猜你喜欢

转载自blog.csdn.net/qq_27378875/article/details/81220084