`

死锁demo

 
阅读更多
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
进入死锁状态,进入无限等待中。

 

 

分享到:
评论
2 楼 javawangzilong 2013-05-15  
Thread.sleep(1000);为什么线程不睡眠了
1 楼 blgaici1 2012-06-20  
给力...

相关推荐

    libevent死锁demo(使用pair bufferevents)

    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多线程Demo`是一个关于如何在Delphi环境中使用`CreateThread`创建线程并使用`TMessage`进行线程间通信的实例。这种技术对于编写高效、响应式的应用程序至关重要。理解并熟练掌握这些知识,将有助于...

    uThreadPool.pas 线程池示例 DEMO 修正资源死锁

    DEMO程序必须重新编译运行才能修正原资源死锁问题 取自卢伟的专栏DELPHI 线程池代码(http://blog.csdn.net/babyvspp/archive/2008/01/01/2008234.aspx),封装的十分完美,用法也非常简单,可以根据使用者设定的...

    实测有效的一个c++检测线程死锁的解决方法(实现和测试代码)

    实测有效的一个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...

    Delphi 多线程 DEMO

    8. **线程优先级**:可以设置线程的优先级,但过度依赖优先级可能导致优先级反转和死锁问题,所以通常需要谨慎处理。 在压缩包中,有以下几个文件: - **Unit1.dfm**:这是Form的设计文件,描述了界面上组件的布局...

    java多线程代码demo

    本示例代码集合("java多线程代码demo")涵盖了多线程的多种实现方式,包括Thread类和Runnable接口的使用,以及对死锁的理解与避免。通过以下详细解释,你可以深入了解Java多线程的原理和实践。 1. **Thread类**:...

    iOS多线程Demo

    此外,多线程还会涉及线程安全问题,比如数据竞争和死锁。在并发环境下,访问共享资源时需要同步机制,如互斥锁(NSLock、@synchronized关键字)、信号量(NSCondition)等。在Demo中,可能会有示例演示如何处理这些...

    redission 秒杀实现demo

    本文将深入探讨如何使用 Redisson 实现一个秒杀系统,并通过 `demo3` 这个示例代码来讲解关键知识点。 首先,我们需要理解秒杀系统的核心需求:在短时间内处理大量用户请求,确保每个用户只能参与一次秒杀活动,...

    异步多线程Demo

    这个“异步多线程Demo”很可能是为了帮助学习者理解并实践多线程编程而提供的一个实例。 1. **线程定义**:线程是程序执行的最小单元,每个线程都有自己的程序计数器、系统栈和局部变量。在单个进程中,可以有多个...

    C++多线程demo

    综上所述,"C++多线程demo"可能展示了如何在C++中创建、管理和同步线程,以及如何处理多线程编程中常见的挑战。通过学习这个示例,开发者可以更好地理解和应用C++的多线程特性,以提升其软件的并发性能和响应能力。

    JTA-demo说明文档.doc

    这个文档可能还会解释如何处理常见的问题,比如事务超时、死锁和并发冲突等。 总的来说,理解和掌握JTA对于开发大型、分布式的企业级应用至关重要,因为它能够保证在复杂环境下的数据完整性,提升系统的可靠性。...

    Demo.rar_6轴 四元数_6轴融合_DEMO_四元数_欧拉角

    本文将深入探讨标题和描述中提及的“6轴四元数”、“6轴融合”以及它们与“欧拉角”的关系,并通过提供的Demo.cpp代码来理解其工作原理。 首先,让我们了解欧拉角。欧拉角是一种描述三维空间中物体旋转的方法,通常...

    demo.rar_DEMO

    标题中的"demo.rar_DEMO"表明这是一个示例压缩包,其中包含了有关多线程编程的演示程序。"Multi-threaded demo program"描述...此外,还可以学习如何在UI线程和工作线程之间安全地更新界面,防止出现竞态条件或死锁。

    simple-demo.zip|simple-demo.zip

    多线程编程涉及的主要知识点包括线程同步(避免竞态条件)、死锁预防、线程安全的数据结构以及如何有效地分配任务到不同线程。 标签"test"可能意味着这个压缩包包含的是一个测试项目,用于验证多线程功能的正确性或...

    操作系统生产者消费者DEMO

    在这个DEMO中,我们将深入探讨这个问题及其解决方案。 生产者消费者问题是这样设定的:存在一个共享的有限大小的缓冲区,生产者线程负责生成产品并将其放入缓冲区,而消费者线程则负责从缓冲区取出产品进行消费。...

    demo1_watchdog_DEMO_

    看门狗定时器是嵌入式系统中不可或缺的安全机制,它能够监控系统运行状态,确保程序不会因为意外的死锁或无限循环而陷入不可控的状态。 看门狗定时器(Watchdog Timer,WDT)是一种硬件定时器,它的主要任务是监控...

    java_thread_demo

    本示例"java_thread_demo"很可能是关于Java线程编程的一个实例项目,其中可能包含了创建、管理及同步线程的各种方法。 在Java中,线程可以通过两种方式创建:继承Thread类或者实现Runnable接口。继承Thread类时,你...

    ARM7_LPC2368_Rowley_LPC2368rtos_DEMO_rtos_RTOS的Demo_rowleyarm_

    通过这个模块,开发者可以学习到如何设计和测试并发程序,防止死锁和优先级反转等问题。 总的来说,这个基于ARM7 LPC2368的RTOS Demo项目是一个综合的学习资源,涵盖了RTOS的基本概念、配置、任务创建、硬件驱动、...

Global site tag (gtag.js) - Google Analytics