理解高并发(8).可重入锁RetreenLock用法

一、概述与区别
  • jdk1.5新增RetreenLock机制
  • 并不是为了替代内置锁, 而是当内置锁不能满足锁的高级需求时jdk提供的一种可选锁方案
  • 具有与内置锁相同的内存语义
  • 内置锁是非公平锁,竟争上岗
  • lock锁有更高级的功能,如结合条件上锁、构造公平锁(FIFO)
  • synchronized使用更加简洁方便
  • 实现原理, 内置锁采用悲观锁机制,内部锁通过对象头中的指针monitor获取控制权,其它未获塞资源操作。
  • 由于jdk取到控制权的线程放到wait队列等待竟争上岗执行; 显示锁在AQS的抽象类中采用CAS机制来保障不阻1.6对锁做了很多优化,如自旋锁、偏向锁、锁消除等,再结合并发包中提供的原子数据类型操作,性能上和显示锁差不多


二、显示锁简单示例
private int count;
Lock lock = new ReentrantLock();
public Count(){
count = 0;
}
public void add(){
lock.lock();
count++;
lock.unlock();
/**
* 上述代码的运行效果等同于:
* synchronized(this){
* count++;
* }
*/
}

你可能感兴趣的:(高并发,并发,多线程,线程安全)