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

java死锁

    博客分类:
  • java
阅读更多
public class DeadLock implements Runnable {
private boolean flag;
static Object o1 = new Object(), o2 = new Object();
public void run() {
System.out.println(flag);
if (flag) {
synchronized (o1) {
try {
Thread.sleep(500);
} catch (InterruptedException e) {
e.printStackTrace();
}
synchronized (o2) {
System.out.println("AAA");
}
}
} else {
synchronized (o2) {
try {
Thread.sleep(500);
} catch (InterruptedException e) {
e.printStackTrace();
}
synchronized (o1) {
System.out.println("BBB");
}
}
}
}
public static void main(String[] args) {
DeadLock aaa = new DeadLock();
DeadLock bbb = new DeadLock();
aaa.flag = true;
bbb.flag = false;
Thread thA = new Thread(aaa);
Thread thB = new Thread(bbb);
thA.start();
thB.start();
}
}

   以上是java死锁代码,首先创建一个类DeadLock,要实现多线程就必须让这个对象(DeadLock)继承Thread类或者实现接口Runnable,这里是实现了Runnable接口,然后建立一个boolean类型的变量flag,再建立两个 object类型的成员变量,然后重写run()方法,在run方法中输出变量flag的值,在用if进行判断,如果为真,就让他用synchronized关键字把o1对象给锁定,然后让他休息0.5秒,醒来后继续执行下面的代码,这时候程序就无法执行下去了。
    首先执行main方法,实例了两个对象后,给各自的变量flag赋值后,当执行thA.start()后run执行方法,他的flag为true所以执行if里的句子锁定o1,执行到Thread.sleep(500)后,第二个线程开始运行,执行else里的语句锁定o2对象,当他也执行到Thread.sleep(500)以后,第一个线程就启动了,继续执行,可是o2对象被锁了,无法执行只能等锁的释放,所以第二个线程可能就开始执行了,可是o1对象被锁了,也只能等待谁都不肯释放彼此要的对象所以就有了死锁,程序无法继续执行了
分享到:
评论

相关推荐

    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死锁程序.pdf

    ### 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