`

141多线程-死锁

阅读更多
/*
死锁:
同步中嵌套同步
*/

class Ticket implements Runnable{
	private int tick = 1000;
	Object obj = new Object();
	boolean flag = true;
	public void run(){
		if(flag){
			while(true){
				synchronized(obj){
						show();						
				}
			}
		}
		else
			while(true)
				show();
	}
	public synchronized void show(){
		synchronized(obj){
			if(tick>0){
				try{Thread.sleep(10);}catch(Exception e){}
				System.out.println(Thread.currentThread().getName()
				+"  code  "+tick--);
			}
		}
	}
}
class Deadlock{
	public static void main(String[] args){
		Ticket t = new Ticket();
		Thread t1 = new Thread(t);
		Thread t2 = new Thread(t);
		t1.start();
		try{Thread.sleep(10);}catch(Exception e){}
		t.flag =  false;
		t2.start();
	}
}

class Test implements Runnable{
	private boolean flag;
	Test(boolean flag){
		this.flag = flag;
	}
	public void run(){
		if(flag){
			synchronized(MyLock.locka){
				System.out.println("if locka");
				synchronized(MyLock.lockb){
					System.out.println("if lockb");
				}
			}
		}
		else{
			synchronized(MyLock.lockb){
				System.out.println("MyLock.lockb");
				synchronized(MyLock.locka){
					System.out.println("MyLock.locka");
				}
			}
		}
	}
}

class MyLock{
	static Object locka = new Objecet();
	static Object lockb = new Objecet();
}
class Deadlock{
	public static void main(String[] args){
		Thread t1 = new Thread(new Test(true));
		Thread t2 = new Thread(new Test(false));
		t1.start();
		t2.start();
	}
}
分享到:
评论

相关推荐

    基于java的开发源码-多线程程序死锁检查 JCarder.zip

    基于java的开发源码-多线程程序死锁检查 JCarder.zip 基于java的开发源码-多线程程序死锁检查 JCarder.zip 基于java的开发源码-多线程程序死锁检查 JCarder.zip 基于java的开发源码-多线程程序死锁检查 JCarder.zip ...

    【IT十八掌徐培成】Java基础第09天-01.多线程-时间片-死锁演示.zip

    今天我们将深入探讨Java中的多线程、时间片调度以及死锁的概念,这些都是Java程序员必备的知识点。 首先,让我们来理解什么是多线程。在单线程程序中,执行流程是线性的,一次只能处理一个任务。然而,多线程允许...

    Java多线程之-死锁.doc

    Java 多线程之死锁 Java 多线程中的死锁是指两个或两个以上的线程互相持有对方所需要的资源,由于 synchronized 的特性,一个线程持有一个资源,或者说获得一个锁,在该线程释放这个锁之前,其它线程是获取不到这个...

    多线程死锁

    明白死锁产生的原因,在程序中演示死锁产生并从而实现多线程陈旭解决死锁(deadlock)这一类问题。

    进程线程及死锁

    进程、线程、死锁和POSIX规范的系统调用 进程是操作系统中一个独立的执行单元,它拥有自己的虚拟地址空间和系统资源。线程是轻量级的进程,它共享同一个进程的虚拟地址空间和系统资源。理解进程和线程的概念对于...

    多线程-day01.docx

    线程死锁是指两个或多个线程互相等待对方释放资源,导致无法继续执行的情况。死锁的必要条件包括互斥条件、请求与保持条件、不剥夺条件和环路等待条件。避免死锁的关键在于合理设计资源分配策略和避免循环等待。 ...

    day24-多线程-设计模式.7z

    4. **死锁**:在多线程编程中,死锁是指两个或多个线程相互等待对方释放资源,导致无法继续执行的状态。为了解决死锁问题,我们可以遵循以下原则:避免持有多个锁、避免循环等待、设置超时和回滚策略、使用死锁检测...

    java多线程死锁预防机制研究

    ### Java多线程死锁预防机制研究 #### 摘要 随着计算机技术的发展和软件系统日益复杂的背景下,多线程编程技术得到了广泛的应用。多线程能够显著提高程序的执行效率,但也随之带来了诸如死锁等问题。死锁是指两个或...

    Linux编程手册-多线程-详细资料.rar

    Linux操作系统是开源软件界的瑰宝,它为开发者提供了丰富的编程接口和工具,其中包括对多线程的支持。在《Linux编程手册-多线程-详细资料》中,我们深入探讨了这个主题,旨在帮助无论是初学者还是有经验的程序员都能...

    Java多线程-多线程知识点总结和企业真题

    ### Java多线程知识点总结及企业真题解析 #### 一、知识点总结 ##### (1)多线程相关概念 1. **程序、进程和线程的区分**: - **程序**:为了完成特定的任务而编写的指令集合。它是静态的概念。 - **进程**:...

    Java多线程程序死锁检查 JCarder

    Java多线程编程是开发高并发应用的关键技术之一,但随之而来的是各种复杂的问题,其中最令人头疼的就是死锁。死锁是指两个或多个线程相互等待对方释放资源,导致它们都无法继续执行的情况。JCarder是Java中用于检测...

    0708-极智开发-解读多线程之死锁分享

    0708_极智开发_解读多线程之死锁分享

    Java多线程-避免同步机制带来的死锁问题及用Lock锁解决线程安全问题

    ### Java多线程-避免同步机制带来的死锁问题及用Lock锁解决线程安全问题 #### 死锁 ##### 1. 说明 在多线程编程中,死锁是一种常见的问题,指的是两个或多个线程在执行过程中,因为竞争资源而造成的一种相互等待...

    基于Java的源码-多线程程序死锁检查 JCarder.zip

    然而,多线程编程也带来了许多挑战,其中之一就是死锁。死锁是指两个或更多个线程相互等待对方释放资源,导致它们都无法继续执行的情况。为了解决这个问题,开发者需要有工具来检测和避免死锁的发生。 JCarder是一...

    Python应用实战:python多线程-多线程安全问题&lock与rlock.zip

    在Python中,由于全局解释器锁(GIL)的存在,Python的多线程并不能实现真正的并行计算,但仍然可能遇到线程安全问题,如数据竞争、死锁等。 数据竞争是多线程环境中常见的问题,当两个或多个线程同时访问并修改...

    C++(Qt)软件调试-线程死锁调试(15)

    在处理多线程死锁时,一个重要的原则是避免循环等待。这意味着确保所有线程按相同顺序获取资源,以防止形成环路。此外,可以使用条件变量、信号量等高级同步机制来协调线程间的操作,或者使用死锁预防和死锁避免算法...

    线程死锁的例子

    线程死锁是多线程编程中一个严重的问题,它发生在两个或多个线程相互等待对方释放资源,导致它们都无法继续执行。这个概念在计算机科学中尤为重要,因为并发执行是提高系统性能的关键手段,但如果不妥善处理,死锁...

    MultiThread(VS2013 MFC多线程-含源码-含个人逐步实现文档)

    在本文中,我们将深入探讨如何在Visual Studio 2013中使用MFC(Microsoft Foundation Classes)库实现多线程编程。"MultiThread(VS2013 MFC多线程-含源码-含个人逐步实现文档)"的标题表明这是一个包含详细步骤和源...

    Python自学教程-12-死锁.ev4.rar

    死锁是多线程或进程交互时可能出现的一种状态,其中两个或多个执行单元相互等待对方释放资源,导致它们都无法继续前进。了解和避免死锁是编写高效、可靠程序的重要组成部分。 在Python中,虽然标准库没有直接提供...

    4-死锁1

    在设计多线程应用时,应谨慎使用锁和其他同步机制,以防止死锁的发生。对于系统管理员来说,了解如何识别和解决死锁是确保系统稳定运行的关键技能。通过理解死锁的特征和处理方法,我们可以更好地设计和管理并发环境...

Global site tag (gtag.js) - Google Analytics