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