`
sunxg
  • 浏览: 13742 次
  • 性别: Icon_minigender_1
  • 来自: 北京
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

关于线程死锁问题

阅读更多
看论坛一哥们写的多线程基础总结八--ReentrantReadWriteLock,里面有关死锁的描述
引用
其中的initCache()简单的说明了特性(a),(b).在这个方法中如果把注释(1)和(2)处的代码调换位置,就会发现轻而易举的死锁了


对应的代码段如下
    public void initCache() {  
        readLock.lock();  
        if(!completed) {  
            // Must release read lock before acquiring write lock  
            readLock.unlock(); // (1)  
            writeLock.lock();  // (2)  
            if(!completed) {  
                cache = new HashMap<String,String>(32);  
                completed = true;  
            }  
            // Downgrade by acquiring read lock before releasing write lock  
            readLock.lock();    // (3)  
            writeLock.unlock(); // (4) Unlock write, still hold read  
        }  


我非常不理解是怎么死锁的?即使他所说的代码反过来也不会出现两个线程互相竞争对方持有的锁,何来死锁?不知道是我没理解还是作者理解错了?谁能给解释下?
分享到:
评论

相关推荐

    线程死锁的例子

    线程死锁是多线程编程中一个严重的问题,它发生在两个或多个线程相互等待对方释放资源,导致它们都无法继续执行。这个概念在计算机科学中尤为重要,因为并发执行是提高系统性能的关键手段,但如果不妥善处理,死锁...

    多线程死锁

    明白死锁产生的原因,在程序中演示死锁产生并从而实现多线程陈旭解决死锁(deadlock)这一类问题。

    java模拟线程死锁

    线程死锁是 Java 编程中的一种常见的问题,它可以导致程序的崩溃或性能下降。为了避免线程死锁,我们需要在设计线程之间的交互时,遵循一定的规则和原则,例如避免循环等待、使用锁对象和线程通信机制。

    DllMain和多线程死锁 问题

    DllMain和多线程死锁问题 DllMain是Windows操作系统中的动态链接库(DLL)入口点,当进程和线程启动和终止时被系统调用,分别进行创建资源和释放资源等操作。在DllMain中创建线程或终止线程时,如果违背了DllMain的...

    进程线程及死锁

    在操作系统中,死锁是一个重要的问题,因为它可能会导致系统的崩溃。 在实验中,我们使用互斥锁来避免死锁的发生。互斥锁是指一种机制,它可以防止多个进程同时访问同一个共享资源。通过使用互斥锁,我们可以避免...

    DllMain和多线程死锁[归类].pdf

    DllMain 和多线程死锁 DllMain 是可选择的 DLL 入口指针,当进程和线程启动和终止时被系统调用,分别进行创建资源和释放资源等操作。在 DllMain 中创建线程或结束线程时,都特别要注意一个规则,那就是 DllMain 的...

    多线程死锁问题

    本篇文章将深入探讨Java中的死锁问题,并通过提供的代码示例`ProducerConsumer.java`、`TestDeadLock.java`和`Count3Quit.java`来解释如何识别和解决死锁。 首先,我们需要理解死锁的四个必要条件: 1. **互斥**:...

    Linux系统线程死锁实验报告.pdf

    通过分析本篇实验报告的内容,可以了解到线程同步、互斥锁的使用、多线程编程中的死锁问题以及其解决方法。这对于学习和理解多线程并发编程中的同步和互斥机制,以及线程安全编程是非常有价值的。

    lookcop 线程死锁检测工具

    总的来说,Lookcop是一款强大的工具,它可以帮助开发者在复杂多线程环境中快速定位和解决线程死锁问题,提升程序的可靠性和性能。了解和掌握如何使用Lookcop,对于优化多线程应用的性能至关重要。

    java多线程死锁预防机制研究

    ### Java多线程死锁预防机制研究 #### 摘要 随着计算机技术的发展和软件系统日益复杂的背景下,多线程编程技术得到了广泛的应用。多线程能够显著提高程序的执行效率,但也随之带来了诸如死锁等问题。死锁是指两个或...

    Java Swing多线程死锁问题解析

    Java Swing多线程死锁问题解析 Java Swing多线程死锁问题解析是Java开发者经常遇到的问题之一。在基于Java Swing进行图形界面开发时,经常会遇到多线程问题。如果在图形界面的同一个线程中进行查询和运算工作,则会...

    Java 线程死锁的问题解决办法

    Java 线程死锁的问题解决办法 Java 线程死锁是指两个或两个以上的线程在执行过程中,相互等待对方释放资源,从而造成的僵持状态。在 Java 中,线程死锁的问题解决办法是非常重要的,下面我们将深入探讨 Java 线程...

    linux多线程死锁问题分析

    在Linux系统中,多线程编程是常见的并发执行方式,然而如果不小心,它可能会引发一些问题,特别是死锁。死锁是指两个或多个线程在等待对方释放资源,导致它们都无法继续执行的状态。在这个特定的案例中,我们看到12...

    线程死锁CPU过高,请求原因分析

    线程死锁是多线程编程中一个严重的问题,它发生在两个或多个线程相互等待对方释放资源,导致它们都无法继续执行。CPU过高通常与过度的计算、无尽循环、死锁、线程竞争状态等问题相关。在Java编程中,WeakHashMap是一...

    C++(Qt)软件调试-线程死锁调试(15)

    在处理多线程死锁时,一个重要的原则是避免循环等待。这意味着确保所有线程按相同顺序获取资源,以防止形成环路。此外,可以使用条件变量、信号量等高级同步机制来协调线程间的操作,或者使用死锁预防和死锁避免算法...

    java线程死锁实例

    在这种情况下,理解并应用上述理论可以有效地防止和解决死锁问题。 在实际编程中,避免死锁的关键是合理设计并发策略,包括锁的使用、资源的分配以及线程间的协作。通过深入理解Java的并发机制,如`synchronized`...

    解决线程死锁问题的 生产者 消费者程序.rar_linux_linux 线程_生产者_生产者 消费者_生产者消费者

    本资源“解决线程死锁问题的 生产者 消费者程序.rar”显然是针对这一问题提供的一种解决方案,它特别关注了Linux环境下的线程管理。"生产者-消费者"模型是一个经典的并发编程模型,用于演示如何有效地共享有限资源,...

    多线程死锁,活锁,竞争锁问题总结

    ### 多线程死锁、活锁与竞争锁问题总结 #### 一、多线程基础知识简介 在探讨多线程编程中常见的问题之前,我们首先简要回顾一下多线程的基本概念。多线程是一种允许多个线程在同一进程中并发执行的技术。每个线程...

    dump线程让死锁无处可逃

    本文将深入探讨如何利用“dump线程”这一技术来分析和解决死锁问题。我们将从以下几个方面来理解这个主题: 1. **什么是死锁**: 死锁是指两个或多个并发进程在执行过程中,因争夺资源而造成的一种互相等待的现象...

Global site tag (gtag.js) - Google Analytics