`
dbp_cn
  • 浏览: 85039 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

重入线程

 
阅读更多

 当某个线程请求一个由其他线程持有的锁时,发出的请求的线程就会阻塞。然而,由于内置锁是可重入的,因此如果某个线程试图获得一个已经由它自己持有的锁,那么这个请求就会成功。”重入“ 意味着获取锁的操作的粒度是“线程”,而不是“调用”。重入的一种实现方法是 为每个锁关联一个获取计数值和一个所有者线程。当计数值为0时,JVM将记下锁的持有者,并且将获取计数值置为1。如果同一个线程再次获取这个锁,计数值将递增,而当线程退出同步代码块时,计数器会响应地递减。当计数值为0时,这个锁将被释放。

public class Widget{
    public synchronized void doSomething(){
       System.out.println("do something");
    }
}

public class LoggingWidget extends Widget{
      public synchronized void doSomething(){
          System.out.println(toString()+":calling doSomething");
          super.doSomething();

    }

}

 

      重入进一步提升了加锁行为的封装性,因此简化了面向对象并发代码的开发。在程序中,子代码改写了父类的synchronized方法,然后调用父类的方法,此时如果没有可重入的锁,那么这段代码将产生死锁。由于Widget和LoggingWidget中doSomething方法在执行时将无法获得Widget上的锁,因为这个锁已经被持有,从而线程将永远停顿下去,等待一个永远也无法获得的锁,重入则避免了这种死锁的发生。

分享到:
评论

相关推荐

    可重入函数与线程安全函数

    ### 可重入函数与线程安全函数 在多线程编程中,可重入函数与线程安全函数是两个非常重要的概念。了解这两个概念对于编写高质量、高性能的并发程序至关重要。 #### 可重入函数定义 可重入函数是指在多线程环境下...

    【Linux】— 线程安全 VS可重入

    线程安全 VS 可重入什么是线程安全和可重入常见的线程不安全的情况(重点)常见的线程安全的情况(重点)常见的可重入情况常见不可重入的情况可重入与线程安全联系可重入与线程安全区别(重点) 什么是线程安全和可重入 ...

    可重入详解可重入详解

    在计算机科学领域中,“可重入”(reentrant 或 re-entrant)是一个重要的概念,尤其在多线程编程和并发环境中尤为关键。如果一个程序或者子程序能够被安全地并行执行,那么我们称这个程序或子程序为“可重入”的。...

    LabVIEW中可重入VI设置范例

    在LabVIEW(Laboratory Virtual Instrument Engineering Workbench)中,可重入VI(Reentrant VI)是一种特殊类型的虚拟仪器,设计用于解决多线程环境下的并发访问问题,确保数据的完整性和程序的正确运行。...

    关于线程安全与可重入性.pdf

    线程安全和可重入性是多线程编程中的核心概念,它们对于保证并发环境下的程序正确性和性能至关重要。线程安全是指一个函数或方法在多线程环境下被调用时,能够正确处理共享资源,不会因为线程间的交互而导致错误的...

    Java多线程高并发篇(一)--重入锁

    在Java多线程高并发编程中,重入锁(ReentrantLock)是一个至关重要的概念,它提供了比Java内置锁(synchronized)更细粒度的控制,并且具有更高的可读性和可扩展性。本篇文章将深入探讨重入锁的相关知识点。 首先...

    可重入函数与不可重入函数

    函数的可重入性关系到程序能否在多线程或者中断服务中安全地执行,以及能否在多任务环境下被多个任务安全地调用。下面将详细介绍可重入函数与不可重入函数的概念、特性以及如何编写和转换这两种类型的函数。 可重入...

    手写可重入锁

    可重入锁的主要特性是它允许一个已经持有锁的线程再次请求该锁,而不被阻塞。这种设计是为了避免死锁情况的发生。当一个线程在执行过程中需要进入一个已被自己持有的锁保护的代码块时,如果锁是可重入的,那么它就...

    自己动手写一把可重入锁测试案例

    测试应覆盖各种边界情况,例如单线程、多线程竞争、重入、锁升级等,以充分验证我们的实现。 总之,可重入锁是Java并发编程中不可或缺的一部分,理解和实现它有助于深入掌握线程安全的概念和机制。通过动手实践,...

    可重入函数

    可重入性是指一个函数可以被多个任务或线程同时调用而不会出现数据错误的情况。这种特性对于多线程编程尤为重要,因为它能够保证在并发环境下程序的正确性和稳定性。 **1.2 可重入函数的特点** - **不持有静态数据...

    可重入函数c语言

    可重入函数的优点是可以提高程序的执行效率和可靠性,但需要遵循一定的编写规范和规则,以确保函数的可重入性和线程安全性。 了解可重入函数的概念和编写规范,对于提高程序的执行效率和可靠性具有重要意义。

    读写锁,不支持重入

    在不支持重入的情况下,这意味着一旦线程获得了读锁或写锁,它无法再次获取同一类型的锁,直到释放当前持有的锁。这种设计有助于防止死锁,并在某些情况下提高并发性能。 读写锁的核心概念包括读锁和写锁。读锁用于...

    Java多线程示例之线程控制

    在读写操作中,通常会用到`ReentrantLock`(可重入锁)配合`Condition`来实现对共享资源的精确控制,确保在特定时刻只有一个线程进行读或写操作,从而避免数据不一致。 线程控制的实践不仅关乎性能,还直接影响程序...

    java线程线程安全同步线程

    `ReentrantLock`可重入锁提供了更灵活的控制,支持公平锁和非公平锁策略。 线程优先级是调度的重要依据,Java线程有三个基本优先级:`Thread.MIN_PRIORITY`(最低优先级)、`Thread.NORM_PRIORITY`(正常优先级)和`...

    java多线程设计模式_java_设计模式_多线程_多线程课题_

    Java提供了多种同步机制,如synchronized关键字、wait()和notify()方法、ReentrantLock重入锁、Semaphore信号量等。synchronized用于保证同一时刻只有一个线程访问共享资源,而wait()和notify()用于线程间的通信,...

    JAVA多线程编程技术PDF

    Lock接口提供了更细粒度的锁控制,支持可中断和可重入的锁。volatile确保变量在多线程环境中的可见性和有序性,避免缓存一致性问题。 此外,线程间通信也是多线程编程的重要方面。Java提供了wait(), notify()和...

    java 多线程并发实例

    生产者线程负责生成数据,放入缓冲区;消费者线程则负责取出数据进行处理。Java的BlockingQueue接口(如ArrayBlockingQueue)非常适合实现这一模型,它提供了线程安全的数据插入和移除操作。 在实例中提到的"全部...

    Java多线程编程

    可重入锁支持公平与非公平锁模式,可以被显式地获取和释放,还提供了中断锁请求、尝试获取锁(tryLock)以及定时等待获取锁的能力。 4. **Object方法**:`Object`类中的几个方法在多线程环境下特别重要,如`wait()`...

    C#中Timer使用及解决重入问题

    重入是指当一个线程正在执行某个方法时,由于多线程特性,另一个线程也可能尝试执行同一个方法。对于非线程安全的代码,这可能导致数据不一致或其他未预期的行为。在`System.Timers.Timer`中,如果事件处理过程耗时...

Global site tag (gtag.js) - Google Analytics