可重入锁

Posted 邱进宝

tags:

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

可重入锁,也叫做递归锁,指的是同一线程 外层函数获得锁之后 ,内层递归函数仍然有获取该锁的代码,但不受影响。
在JAVA环境下 ReentrantLock 和synchronized 都是 可重入锁。

下面是使用实例:

public class Test implements Runnable{
 public synchronized void get(){
  System.out.println(Thread.currentThread().getId());
  set();
 }
 public synchronized void set(){
  System.out.println(Thread.currentThread().getId());
 }
 @Override
 public void run() {
  get();
 }
 public static void main(String[] args) {
  Test ss=new Test();
  new Thread(ss).start();
  new Thread(ss).start();
  new Thread(ss).start();
 }
}

两个例子最后的结果都是正确的,即 同一个线程id被连续输出两次。

结果如下:

Threadid: 8
Threadid: 8
Threadid: 10
Threadid: 10
Threadid: 9
Threadid: 9
可重入锁最大的作用是避免死锁。
 
引一篇例子,比较详细

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

6.23Java多线程可重入锁实现原理

两种方式实现自己的可重入锁

可重入锁和不可重入锁

可重入锁和不可重入锁

可重入锁详解(什么是可重入)

可重入锁