public class DeadLock {
public static String resource1="df";//资源一
public static String resource2="df";//资源二
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
Thread thread1 =new Thread(){
public void run(){
synchronized(resource1){
System.out.println("资源一已占用,停一会之后再占用资源二");
try {
Thread.sleep(5000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
synchronized(resource2){
System.out.println("现在已占用资源二");
}
}
};
Thread thread2 = new Thread(){
public void run(){
synchronized(resource2){
System.out.println("资源二已占用,停一会之后再占用资源一");
try {
Thread.sleep(300);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
synchronized(resource1){
System.out.println("占用资源一去");
}
}
};
thread1.start();
System.out.println("线程一执行中....");
thread2.start();
System.out.println("线程二执行中....");
}
}
上边的例子是不构成死锁的,因为执行顺序的先后总是有误差的, 但是我的大体的理解就是那样 synchronized关键字就是说“占用某个资源并给他上锁”。
就好一两个人A有苹果,B柚子,但是A想吃柚子,B想吃苹果,A就说了,你先给我柚子我就给你苹果,B同时也说,你先给我苹果我再给你柚子,结果两个人谁也不让步,就僵持在那里。
分享到:
相关推荐
"Java.jpg"文件可能是一个关于死锁的流程图或者示意图,帮助直观理解死锁的发生过程。 总之,理解并避免Java中的死锁对于编写高效、可靠的多线程应用程序至关重要。开发者应具备良好的并发编程知识,以便在设计和...
《银行家算法避免死锁:Java模拟实现》 在多线程编程中,死锁是一个常见且严重的问题,它发生在两...通过理解并实践银行家算法,我们可以更好地理解和防止多线程环境中的死锁问题,为复杂系统的资源管理提供有力保障。
本文通过一个简单的化妆类(Markup)和两个对象——口红(LipStick)和镜子(Mirror)的案例,展示了如何在Java中产生死锁。化妆类中的线程尝试同时持有这两个对象的锁,但顺序不同,从而导致了死锁。 首先,我们...
本教程将通过Java实现死锁的模拟,帮助学习者理解这一复杂的概念,并提供一个简单的、易于理解的解决方案。 首先,我们需要了解死锁的四个必要条件: 1. **互斥条件**:资源必须被单个进程独占,即在同一时刻,...
在Java中,死锁的实例可以通过一个简单的代码示例来解释。考虑以下情况: ```java public class DeadThread { private Thread thread1; public DeadThread(Object object1, Object object2){ thread1 = new ...
这是最容易理解也是最简单的死锁的形式。 但是实际环境中的死锁往往比这个复杂的多。可能会有多个线程形成了一个死锁的环路,比如:线程T1持有锁L1并且申请获得锁L2,而线程T2持有锁L2并且申请获得锁L3,而线程T3...
标题:一个简单的和死锁有关的程序 描述与分析: 本程序通过两个`DeadThread`线程类实例和两个`Test`对象实例演示了死锁(deadlock)现象。死锁是多线程编程中常见的一种问题,发生在多个线程相互等待对方释放资源...
本文将深入探讨Java线程中的同步机制及其可能导致的一个严重问题——死锁,并通过具体的示例来帮助读者更好地理解和解决这些问题。 #### 二、Java线程同步 ##### 2.1 同步的重要性 在多线程环境中,多个线程可能会...
Java编程中的线程调度与死锁...总结来说,理解并掌握Java中的线程调度和死锁避免是提升多线程编程能力的关键。通过实践,如在Eclipse中编写示例程序,可以帮助我们更好地理解这些概念,并在实际项目中避免潜在的问题。
Java死锁是并发编程中的一个常见问题,它发生在两个或多个线程在执行过程中,因争夺资源而造成的一种僵局。发生死锁时,各线程互相等待对方释放资源,导致无法向前推进程序。死锁的四个必要条件是互斥条件、请求与...
### 死锁解密:Java 中避免致命纠缠的策略 #### Java 语言概览与特点 Java 是一种广泛采用的...综上所述,通过理解和应用上述策略,开发者可以在 Java 程序中有效地避免死锁的发生,从而提高应用程序的稳定性和性能。
理解并熟练掌握Java线程的创建、控制以及同步是Java开发者必备的技能。 首先,我们来探讨一下Java线程的创建方式。Java提供了两种主要的线程创建方法:通过实现Runnable接口和继承Thread类。当一个类实现Runnable...
根据给定文件的信息,...特别是银行家算法,它不仅有助于理解如何预防死锁的发生,还能为实际应用提供参考。而随机分配算法则展示了在缺乏安全性检查的情况下可能出现的问题,从而进一步强调了资源分配策略的重要性。
在本项目中,"JAVA实现的简单的chatroom 适合初学者",我们主要涉及三个核心领域:Java编程、GUI(图形用户界面)设计以及网络连接和多线程技术。这个项目对于初学者来说是一个很好的起点,因为它涵盖了Java编程中...
Java多线程死锁是并发编程中一个严重的问题,它发生在两个或更多个线程相互等待对方持有的资源而无法继续执行的情况。理解死锁的概念及其产生原因对于避免和解决这类问题至关重要。 首先,死锁产生的主要原因包括:...
Java多线程是Java编程中的重要概念,它允许程序同时执行多个任务,提高了程序的效率和响应性。在Java中,实现多线程有两种主要方式:通过...通过分析和实践提供的Applet示例,我们可以深入理解和掌握Java多线程的应用。
总的来说,理解和处理操作系统死锁是操作系统课程中的核心内容,而在Java编程中,通过理解并发机制和使用适当的同步工具,我们可以有效地预防和解决死锁问题。对于`Bank.java`这样的代码,深入分析其并发逻辑,结合`...
本项目是一个基于Java的简单QQ群聊系统,旨在帮助初学者理解线程和输入输出(IO)在实际项目中的应用,同时也涉及到一些基础的算法设计。 1. **线程概念与实现** - Java中的线程允许程序同时执行多个任务,提高了...
本示例"简单的Java线程demo"旨在帮助初学者理解如何在Java中创建和管理线程。 在Java中,有两种主要的方式来创建线程:继承Thread类和实现Runnable接口。下面我们将详细讨论这两个方法。 1. 继承Thread类: 当一个...