可重入锁

作者: 南乡清水 | 来源:发表于2018-03-05 09:55 被阅读26次

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

直接放代码


public class SubService {

ReentrantLock lock = new ReentrantLock();

public void subService1() {

    lock.lock();

    System.out.println("thread = " + Thread.currentThread().getId() + " --subService1");

    subService2();

    lock.unlock();

}

public synchronized void subService2() {

    System.out.println("thread = " + Thread.currentThread().getId() + " --subService2");

}

}

public class Service extends SubService {

public synchronized void service1(){

    System.out.println("thread = " + Thread.currentThread().getId() + " --service1");

    service2();

}

public synchronized void service2() {

    System.out.println("thread = " + Thread.currentThread().getId() + " --service2");

    service3();

}

public synchronized void service3() {

    System.out.println("thread = " + Thread.currentThread().getId() + " --service3");

    this.subService1();

}

}

public class MyThread extends Thread {

@Override

public void run() {

    Service service = new Service();

    service.service1();

}

public static void main(String[] args) throws Exception {

    MyThread thread1 = new MyThread();

    thread1.start();

    MyThread thread2 = new MyThread();

    thread2.start();

}

} 

运行结果

image

通过测试,可以得知 ReentrantLock 和synchronized锁是可以重入的,且在父子类继承环境中同样有效,如果该类型锁不可重入,则在调用service1()方法的时候,应该发生死锁,结果是同一线程的锁内部函数中锁可以重入。

来源 :

java多线程编程核心技术

Java锁的种类以及辨析(四):可重入锁 http://ifeve.com/java_lock_see4/

相关文章

  • ReentrantLock 源码分析

    锁的基本概念 可重入锁 Reentrant 就是可重入的意思,如果锁具备可重入性,则称作为可重入锁。像synchr...

  • java可重入锁

    可重入概念: java的可重入锁: 可重入锁的一种实现方式: 可重入锁的两种使用例子: 例子1: 例子2: 例子1...

  • Java 可重入锁 公平锁 读写锁

    1.可重入锁 如果锁具备可重入性,则称作为可重入锁。 像synchronized和ReentrantLock都是可...

  • Java中的各种锁

    一个线程中的多个流程能不能获取同一把锁:可重入锁和非可重入锁 可重入锁 可重入性:表明了锁的分配机制,是基于线程的...

  • 可重入锁和非可重入锁

    1 可重入锁 (ReentrantLock和synchronized)可重入锁指的是可重复可递归调用的锁,在外层使...

  • J.U.C-AQS-ReentrantLock

    ReentrantLock(可重入锁)和synchronized区别 可重入性 锁的实现(ReentrantLoc...

  • Java温故而知新之Lock与Synchronized

    两者比较: 相关概念解析 可重入锁如果锁具备可重入性,则称作为可重入锁。假设方法A需要获取锁,方法B也需要获取锁,...

  • 可重入锁-面试题:synchronized是可重入锁吗?

    前言 面试题:synchronized是可重入锁吗? 答案:synchronized是可重入锁。Reentrant...

  • 可重入锁-synchronized是可重入锁吗?Reentran

    前言 面试题:synchronized是可重入锁吗? 答案:synchronized是可重入锁。Reentrant...

  • 各种锁的概念

    锁的概念 可重入不可重入公平锁非公平锁锁中断通过一个故事理解可重入锁的机制 - 小勇DW3 - 博客园[https...

网友评论

  • 极客小姑凉:可重入锁,一般获取锁的时候,看当前线程时候就是获取锁的线程
    南乡清水:是的,比如上面的ReentrantLock,你可以看下redission可重入锁的实现,蛮有意思的

本文标题:可重入锁

本文链接:https://www.haomeiwen.com/subject/dloqfftx.html