`

Java 死锁

 
阅读更多
死锁

Java对死锁没有提供语言层面的支持,只能通过仔细设计来避免死锁。

示例:
public class DeadLock implements Runnable {    
    public int flag = 1;    
    //静态对象是类的所有对象共享的    
    private static Object o1 = new Object(), o2 = new Object();    
    @Override    
    public void run() {
        System.out.println("flag=" + flag);    
        if (flag == 1) {    
            synchronized (o1) {
                try {    
                    Thread.sleep(500);    
                } catch (Exception e) {    
                    e.printStackTrace();    
                }    
                synchronized (o2) {    
                    System.out.println("1");    
                }    
            }    
        }    
        if (flag == 0) {    
            synchronized (o2) {    
                try {    
                    Thread.sleep(500);    
                } catch (Exception e) {    
                    e.printStackTrace();    
                }    
                synchronized (o1) {    
                    System.out.println("0");    
                }    
            }    
        }    
    }    
    public static void main(String[] args) {    
            
        DeadLock td1 = new DeadLock();    
        DeadLock td2 = new DeadLock();    
        td1.flag = 1;    
        td2.flag = 0;    
        //td1,td2都处于可执行状态,但JVM线程调度先执行哪个线程是不确定的。    
        //td2的run()可能在td1的run()之前运行    
        new Thread(td1).start();    
        new Thread(td2).start();    
    }    
} 

 

分享到:
评论

相关推荐

    java死锁源码java死锁源码

    java死锁源码java死锁源码java死锁源码java死锁源码java死锁源码java死锁源码java死锁源码java死锁源码java死锁源码java死锁源码java死锁源码java死锁源码java死锁源码java死锁源码java死锁源码java死锁源码java死锁...

    Java 死锁示例性源代码

    本源代码是博客《Java 多线程编程之七:死锁(附源代码)》附带的实例性源代码。原博客链接地址:http://blog.csdn.net/defonds/archive/2010/01/26/5258120.aspx。

    Java死锁_动力节点Java学院整理

    Java死锁_动力节点Java学院整理,动力节点Java学院整理

    Java死锁的问题分析与研究

    Java死锁的问题分析与研究

    java死锁问题

    Java死锁问题是一个在多线程编程中常见的复杂情况,它发生在两个或多个线程相互等待对方释放资源,导致它们都无法继续执行的情况。理解并解决死锁是Java开发者必须掌握的关键技能之一,尤其是在构建高并发、多线程...

    JAVA死锁and生产者消费者问题

    在Java编程中,死锁和生产者消费者问题是多线程编程中的两个重要概念,它们涉及到并发执行和资源管理。理解并正确处理这些问题对于构建高效、可靠的多线程应用至关重要。 死锁是指两个或多个线程在执行过程中,因...

    java 一个死锁的例子

    在Java编程中,死锁是并发编程中一个重要的概念,它发生在两个或多个线程相互等待对方释放资源,导致它们都无法继续执行的情况。这个例子中,我们将会深入探讨死锁的产生、识别以及如何避免它。 首先,让我们理解...

    Java多线程程序死锁检查 JCarder

    Java多线程编程是开发高并发应用的关键技术之一,但随之而来的是各种复杂的问题,其中最令人头疼的就是死锁。死锁是指两个或多个线程相互等待对方释放资源,导致它们都无法继续执行的情况。JCarder是Java中用于检测...

    如何通过编程发现Java死锁

    死锁是指,两个或多个动作一直在等待其他动作完成而使得所有动作都始终处在阻塞的状态。想要在开发阶段检测到死锁是非常困难的,而想要解除...  Java 5引入了ThreadMXBean接口,它提供了多种监视线程的方法。我建议

    Java源码房门终于被打开了(解决死锁的方法).rar

    在“房门终于被打开了(解决死锁的方法)”这个主题中,可能详细分析了实际案例,演示了如何通过上述策略解决Java死锁问题。通过阅读"说明.txt"和"房门终于被打开了(解决死锁的方法)"这两个文件,我们可以更深入地...

    银行家避免死锁算法模拟实现Java版

    《银行家算法避免死锁:Java模拟实现》 在多线程编程中,死锁是一个常见且严重的问题,它发生在两个或多个并发进程之间,每个进程都等待其他进程释放资源,从而导致所有进程都无法继续执行。银行家算法是解决死锁...

    死锁检测:死锁检测的Java实现

    本主题将深入探讨死锁的概念、死锁的四个必要条件以及如何在Java中实现死锁检测。 死锁的定义: 死锁是指系统中的多个进程相互等待对方释放资源,从而陷入无法前进的状态。这种状态通常会导致系统停滞不前,影响...

    java模拟线程死锁

    Java 模拟线程死锁 线程死锁 在 Java 中,线程死锁(Deadlock)是一种特殊的情况,发生在两个或多个线程之间的互相等待对方释放资源的状态。这种情况下,各个线程都在等待其他线程释放资源,而自己也占用着其他...

    Java中死锁的例子

    在Java编程中,死锁(DeadLock)是一个重要的并发控制问题,它发生在两个或多个线程互相持有对方需要的资源并等待对方释放时,导致所有线程都无法继续执行的情况。死锁是多线程编程中需要特别注意和避免的问题,因为...

    什么是死锁,如何避免死锁?Java死锁详解

    在Java中,死锁的实例可以通过一个简单的代码示例来解释。考虑以下情况: ```java public class DeadThread { private Thread thread1; public DeadThread(Object object1, Object object2){ thread1 = new ...

    java实现死锁的示例代码

    Java 实现死锁的示例代码 死锁是指多个进程循环等待它方占有的资源而无限期地僵持下去的局面。在计算机系统中,涉及软件、硬件资源都可能发生死锁。例如,在一个系统中,只有一台 CD-ROM 驱动器和一台打印机,某一...

    详解java中产生死锁的原因及如何避免

    java中产生死锁的原因及如何避免 java中的死锁是一个常见的问题,它会导致程序的崩溃甚至是系统的崩溃。因此,了解java中产生死锁的原因和如何避免是非常重要的。 java中产生死锁的原因 在java中,死锁是指两个或...

    Java解决死锁问题eclipse代码版

    在Java编程中,死锁是多线程环境下常见的问题,当两个或多个线程相互等待对方释放资源,导致它们都无法继续执行时,就会出现死锁。`synchronized`关键字是Java提供的一种内置锁机制,用于控制对共享资源的并发访问,...

Global site tag (gtag.js) - Google Analytics