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 多线程编程之七:死锁(附源代码)》附带的实例性源代码。原博客链接地址:http://blog.csdn.net/defonds/archive/2010/01/26/5258120.aspx。
Java死锁_动力节点Java学院整理,动力节点Java学院整理
Java死锁的问题分析与研究
Java死锁问题是一个在多线程编程中常见的复杂情况,它发生在两个或多个线程相互等待对方释放资源,导致它们都无法继续执行的情况。理解并解决死锁是Java开发者必须掌握的关键技能之一,尤其是在构建高并发、多线程...
在Java编程中,死锁和生产者消费者问题是多线程编程中的两个重要概念,它们涉及到并发执行和资源管理。理解并正确处理这些问题对于构建高效、可靠的多线程应用至关重要。 死锁是指两个或多个线程在执行过程中,因...
在Java编程中,死锁是并发编程中一个重要的概念,它发生在两个或多个线程相互等待对方释放资源,导致它们都无法继续执行的情况。这个例子中,我们将会深入探讨死锁的产生、识别以及如何避免它。 首先,让我们理解...
Java多线程编程是开发高并发应用的关键技术之一,但随之而来的是各种复杂的问题,其中最令人头疼的就是死锁。死锁是指两个或多个线程相互等待对方释放资源,导致它们都无法继续执行的情况。JCarder是Java中用于检测...
死锁是指,两个或多个动作一直在等待其他动作完成而使得所有动作都始终处在阻塞的状态。想要在开发阶段检测到死锁是非常困难的,而想要解除... Java 5引入了ThreadMXBean接口,它提供了多种监视线程的方法。我建议
在“房门终于被打开了(解决死锁的方法)”这个主题中,可能详细分析了实际案例,演示了如何通过上述策略解决Java死锁问题。通过阅读"说明.txt"和"房门终于被打开了(解决死锁的方法)"这两个文件,我们可以更深入地...
《银行家算法避免死锁:Java模拟实现》 在多线程编程中,死锁是一个常见且严重的问题,它发生在两个或多个并发进程之间,每个进程都等待其他进程释放资源,从而导致所有进程都无法继续执行。银行家算法是解决死锁...
本主题将深入探讨死锁的概念、死锁的四个必要条件以及如何在Java中实现死锁检测。 死锁的定义: 死锁是指系统中的多个进程相互等待对方释放资源,从而陷入无法前进的状态。这种状态通常会导致系统停滞不前,影响...
Java 模拟线程死锁 线程死锁 在 Java 中,线程死锁(Deadlock)是一种特殊的情况,发生在两个或多个线程之间的互相等待对方释放资源的状态。这种情况下,各个线程都在等待其他线程释放资源,而自己也占用着其他...
在Java编程中,死锁(DeadLock)是一个重要的并发控制问题,它发生在两个或多个线程互相持有对方需要的资源并等待对方释放时,导致所有线程都无法继续执行的情况。死锁是多线程编程中需要特别注意和避免的问题,因为...
在Java中,死锁的实例可以通过一个简单的代码示例来解释。考虑以下情况: ```java public class DeadThread { private Thread thread1; public DeadThread(Object object1, Object object2){ thread1 = new ...
Java 实现死锁的示例代码 死锁是指多个进程循环等待它方占有的资源而无限期地僵持下去的局面。在计算机系统中,涉及软件、硬件资源都可能发生死锁。例如,在一个系统中,只有一台 CD-ROM 驱动器和一台打印机,某一...
java中产生死锁的原因及如何避免 java中的死锁是一个常见的问题,它会导致程序的崩溃甚至是系统的崩溃。因此,了解java中产生死锁的原因和如何避免是非常重要的。 java中产生死锁的原因 在java中,死锁是指两个或...
在Java编程中,死锁是多线程环境下常见的问题,当两个或多个线程相互等待对方释放资源,导致它们都无法继续执行时,就会出现死锁。`synchronized`关键字是Java提供的一种内置锁机制,用于控制对共享资源的并发访问,...