java的一个死锁的例子
package com.out.test;
public class Test6 implements Runnable{
public static Object o1 = new Object();
public static Object o2 = new Object();
public static int i = 1;
public int flag=1;
public void run() {
System.out.println(i++ + "线程启动。。。。");
if (flag == 1) {
synchronized(o1) {
try {
Thread.sleep(3000);
} catch (InterruptedException e) {
e.printStackTrace();
}
synchronized (o2) {
System.out.println(i + "线程结束");
}
}
}
if (flag == 0) {
synchronized(o2) {
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
synchronized (o1) {
System.out.println(i + "线程结束");
}
}
}
}
public static void main(String[] args) {
Test6 lock1 = new Test6();
Test6 lock2 = new Test6();
lock1.flag = 1;
lock2.flag = 0;
Thread thread1 = new Thread(lock1);
Thread thread2 = new Thread(lock2);
thread1.start();
thread2.start();
}
}
分享到:
相关推荐
在Java编程中,死锁是并发编程中一个重要的概念,它发生在两个或多个线程相互等待对方释放资源,导致它们都无法继续执行的情况。这个例子中,我们将会深入探讨死锁的产生、识别以及如何避免它。 首先,让我们理解...
下面将详细解释Java中的死锁现象,并通过一个具体的例子来说明。 死锁的四个必要条件: 1. 互斥条件:至少有一个资源是不能同时被两个线程持有的,即一次只有一个线程可以访问。 2. 请求与保持条件:一个线程已经...
线程池里的线程等待等待队列里的线程执行,等待队列里的等待线程池里的完成,相互等待
Java 多线程中的死锁是指两个或两个以上的线程互相持有对方所需要的资源,由于 synchronized 的特性,一个线程持有一个资源,或者说获得一个锁,在该线程释放这个锁之前,其它线程是获取不到这个锁的,而且会一直死...
本教程将通过Java实现死锁的模拟,帮助学习者理解这一复杂的概念,并提供一个简单的、易于理解的解决方案。 首先,我们需要了解死锁的四个必要条件: 1. **互斥条件**:资源必须被单个进程独占,即在同一时刻,...
4. 循环等待条件:存在一个线程集合,每个线程都在等待集合中的下一个线程所持有的资源,形成一个无法打破的循环。 Java的`synchronized`关键字可以有效地防止多个线程同时进入临界区,减少死锁的发生。有以下两种...
本源代码是博客《Java 多线程编程之七:死锁(附源代码)》附带的实例性源代码。原博客链接地址:http://blog.csdn.net/defonds/archive/2010/01/26/5258120.aspx。
4. **继承与多态**:Java支持单一继承,一个子类可以继承父类的属性和方法。多态允许不同的子类对象对同一消息做出不同的响应,增强了代码的灵活性。 5. **接口**:接口是完全抽象的类,用于定义一组方法,实现多个...
《 Beginning Java 7 - Code from the Book》是Java 7编程初学者的重要参考...书中的每个例子都经过精心设计,旨在解释一个特定的概念,通过动手实践,学习效果更佳。对于Java初学者来说,这是一个不可多得的学习资源。
标题:一个简单的和死锁有关的程序 描述与分析: 本程序通过两个`DeadThread`线程类实例和两个`Test`对象实例演示了死锁(deadlock)现象。死锁是多线程编程中常见的一种问题,发生在多个线程相互等待对方释放资源...
4. **继承**:继承允许一个类(子类)从另一个类(父类)中获取属性和方法,减少了代码重复,增强了代码的复用性。子类可以覆盖或扩展父类的方法。 5. **多态**:多态性是指同一种行为可以有多种表现形式,它提供了...
本文将深入探讨Java线程中的同步机制及其可能导致的一个严重问题——死锁,并通过具体的示例来帮助读者更好地理解和解决这些问题。 #### 二、Java线程同步 ##### 2.1 同步的重要性 在多线程环境中,多个线程可能会...
- **线程**:线程是操作系统分配CPU时间的基本单元,一个进程可以有多个线程。 - **并发与并行**:并发是指多个线程在单个CPU核心上交替执行,而并行则是在多个CPU核心上同时执行多个线程。 2. **创建Java线程** ...
在这个案例中,如果第一个线程先获取了锁 s1 并且正在尝试获取锁 s2 的同时被挂起,而第二个线程则已经获取了锁 s2 并尝试获取锁 s1,那么这两个线程将会陷入死锁状态。 **案例2** 为了更好地模拟死锁,我们可以...
对于每一个知识点,都提供了丰富的例子,以便读者能够更好地理解和掌握。在学习过程中,不断实践和解决问题是提升技能的关键。所以,请确保完成每一章的习题,这将对你的Java编程能力有着极大的提升。
"java100例"提供了一百个Java编程实例,涵盖了基础到应用的多个方面,对于学习和理解Java语言有着极大的帮助。下面我们将深入探讨这些知识点。 1. **Java基础语法**:Java的基本数据类型(如int、float、boolean等...
在第一个例子中,我们将继承 Thread 类来创建一个多线程类 TestThread。 ```java public class ThreadDemo { public static void main(String[] args) { new TestThread().start(); while(true) { System.out....
其强大的跨平台能力和丰富的类库使得Java在企业级应用开发、Web服务、移动应用等多个领域都有广泛的应用。然而,学习Java的过程中,初学者或经验丰富的开发者都可能会遇到一些棘手的问题,这就是"Java学习利器-JAVA...
然而,这种方法的一个局限性在于,如果我们的类已经继承了其他类,就无法再继承`Thread`类,因为Java不支持多重继承。 **示例代码**: ```java public class TwoThread extends Thread { public void run() { for...