可重入锁和不可重入锁

Posted 禅与计算机程序设计艺术

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了可重入锁和不可重入锁相关的知识,希望对你有一定的参考价值。

用lock来保证原子性

什么是原子性,就是不可分,从头执行到尾,不能被其他线程同时执行。

可通过CAS来实现原子操作。

CAS(Compare and Swap)

CAS操作需要输入两个数值,一个旧值(期望操作前的值)和一个新值,在操作期间先比较下旧值有没有发生变化,如果没有发生变化,才交换成新值,发生了变化则不交换。

CAS主要通过compareAndSwapXXX()方法来实现,而这个方法的实现需要涉及底层的unsafe类

unsafe类:java不能直接访问操作系统底层,而是通过本地方法来访问。Unsafe类提供了硬件级别的原子操作。

 1 public class Counter
 2     private Lock lock = new Lock();
 3     private int count = 0;
 4     public int inc()
 5         lock.lock();
 6         this.count++;  // 这段代码称为临界区
 7         lock.unlock();
 8         return count;
 9     
10 

不可重入锁


先来设计一种锁

 1 public class Lock
 2     private boolean isLocked = false;
 3     public synchronized void lock() throws InterruptedException
 4         while(isLocked)    
 5             wait();
 6         
 7         isLocked = true;
 8     
 9 

以上是关于可重入锁和不可重入锁的主要内容,如果未能解决你的问题,请参考以下文章

可重入锁和不可重入锁

什么是重入锁和AQS

谈谈你对可重入锁和不可重入锁的理解区别及原理

并发编程-concurrent指南-Lock-可重入锁(ReentrantLock)

java中可重入锁和自旋锁

重入锁