package com.jd.schdule;
/**
* 死锁
* @author yfzhangbin
*/
public class DeadlockTest {
public static Object lock1 = new Object();
public static Object lock2 = new Object();
public static void deadlock() {
new Thread(new Runnable() { // 线程T1
public void run() {
synchronized(lock1) {
System.out.println(1);
try {
Thread.sleep(1000);
} catch(Exception e) {
e.printStackTrace();
}
synchronized(lock2) { // 线程T1持有锁lock1,并等待线程T2释放锁lock2
System.out.println(2);
}
}
}
}).start();
new Thread(new Runnable() { // 线程T2
public void run() {
synchronized (lock2) {
System.out.println(3);
synchronized (lock1) { // 线程T2持有锁lock2,等待线程T1释放锁lock1
System.out.println(4);
}
}
}
}).start();
}
public static void main(String[] a){
deadlock();
}
}
输出:
1
3
进入死锁状态,进入无限等待中。
分享到:
相关推荐
demo中已提供libevent的头文件及库文件 demo程序编译命令: g++ -g -o libevent_dead_lock libevent_dead_lock.cpp -I./libevent -lpthread -L./libevent -levent -levent_core -levent_pthreads -lrt -Wl,-rpath=./...
总结来说,`Delphi多线程Demo`是一个关于如何在Delphi环境中使用`CreateThread`创建线程并使用`TMessage`进行线程间通信的实例。这种技术对于编写高效、响应式的应用程序至关重要。理解并熟练掌握这些知识,将有助于...
DEMO程序必须重新编译运行才能修正原资源死锁问题 取自卢伟的专栏DELPHI 线程池代码(http://blog.csdn.net/babyvspp/archive/2008/01/01/2008234.aspx),封装的十分完美,用法也非常简单,可以根据使用者设定的...
实测有效的一个c++检测线程死锁的解决方法(实现和测试代码) 原创实测有效的一个c++检测线程死锁的解决方法,已应用...友情链接:linux版的demo下载地址:https://download.csdn.net/download/guolinnanjing/10893897
- 查看当前的进程状态,如通过`ps -ef | grep demo`命令找到程序的进程号。 - 将gdb附加到已运行的进程上,命令如`gdb attach $pid`。 - 利用`bt`(或`thread apply all bt`)命令查看当前的调用栈。 - 使用`frame x...
8. **线程优先级**:可以设置线程的优先级,但过度依赖优先级可能导致优先级反转和死锁问题,所以通常需要谨慎处理。 在压缩包中,有以下几个文件: - **Unit1.dfm**:这是Form的设计文件,描述了界面上组件的布局...
本示例代码集合("java多线程代码demo")涵盖了多线程的多种实现方式,包括Thread类和Runnable接口的使用,以及对死锁的理解与避免。通过以下详细解释,你可以深入了解Java多线程的原理和实践。 1. **Thread类**:...
此外,多线程还会涉及线程安全问题,比如数据竞争和死锁。在并发环境下,访问共享资源时需要同步机制,如互斥锁(NSLock、@synchronized关键字)、信号量(NSCondition)等。在Demo中,可能会有示例演示如何处理这些...
本文将深入探讨如何使用 Redisson 实现一个秒杀系统,并通过 `demo3` 这个示例代码来讲解关键知识点。 首先,我们需要理解秒杀系统的核心需求:在短时间内处理大量用户请求,确保每个用户只能参与一次秒杀活动,...
这个“异步多线程Demo”很可能是为了帮助学习者理解并实践多线程编程而提供的一个实例。 1. **线程定义**:线程是程序执行的最小单元,每个线程都有自己的程序计数器、系统栈和局部变量。在单个进程中,可以有多个...
综上所述,"C++多线程demo"可能展示了如何在C++中创建、管理和同步线程,以及如何处理多线程编程中常见的挑战。通过学习这个示例,开发者可以更好地理解和应用C++的多线程特性,以提升其软件的并发性能和响应能力。
这个文档可能还会解释如何处理常见的问题,比如事务超时、死锁和并发冲突等。 总的来说,理解和掌握JTA对于开发大型、分布式的企业级应用至关重要,因为它能够保证在复杂环境下的数据完整性,提升系统的可靠性。...
本文将深入探讨标题和描述中提及的“6轴四元数”、“6轴融合”以及它们与“欧拉角”的关系,并通过提供的Demo.cpp代码来理解其工作原理。 首先,让我们了解欧拉角。欧拉角是一种描述三维空间中物体旋转的方法,通常...
标题中的"demo.rar_DEMO"表明这是一个示例压缩包,其中包含了有关多线程编程的演示程序。"Multi-threaded demo program"描述...此外,还可以学习如何在UI线程和工作线程之间安全地更新界面,防止出现竞态条件或死锁。
多线程编程涉及的主要知识点包括线程同步(避免竞态条件)、死锁预防、线程安全的数据结构以及如何有效地分配任务到不同线程。 标签"test"可能意味着这个压缩包包含的是一个测试项目,用于验证多线程功能的正确性或...
在这个DEMO中,我们将深入探讨这个问题及其解决方案。 生产者消费者问题是这样设定的:存在一个共享的有限大小的缓冲区,生产者线程负责生成产品并将其放入缓冲区,而消费者线程则负责从缓冲区取出产品进行消费。...
看门狗定时器是嵌入式系统中不可或缺的安全机制,它能够监控系统运行状态,确保程序不会因为意外的死锁或无限循环而陷入不可控的状态。 看门狗定时器(Watchdog Timer,WDT)是一种硬件定时器,它的主要任务是监控...
本示例"java_thread_demo"很可能是关于Java线程编程的一个实例项目,其中可能包含了创建、管理及同步线程的各种方法。 在Java中,线程可以通过两种方式创建:继承Thread类或者实现Runnable接口。继承Thread类时,你...
通过这个模块,开发者可以学习到如何设计和测试并发程序,防止死锁和优先级反转等问题。 总的来说,这个基于ARM7 LPC2368的RTOS Demo项目是一个综合的学习资源,涵盖了RTOS的基本概念、配置、任务创建、硬件驱动、...