`
yanguz123
  • 浏览: 556920 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

\(^_^)/ 死锁的简单例子

    博客分类:
  • Code
 
阅读更多

一个线程类:

import java.util.concurrent.locks.ReentrantLock;


public class DeadLockCar extends Thread {
	private Object obj;
	static ReentrantLock forward = new ReentrantLock();
	static ReentrantLock backword = new ReentrantLock();
	
	public DeadLockCar(Object obj){
		this.obj = obj;
	}
	
	public void run(){
		if(obj==forward){
			try {
				forward.lockInterruptibly();
				Thread.sleep(1000);
				backword.lockInterruptibly();
			} catch (InterruptedException e) {
				e.printStackTrace();
			}finally{
				if(forward.isHeldByCurrentThread()){
					forward.unlock();
				}
				if(backword.isHeldByCurrentThread()){
					backword.unlock();
				}
			}
			
		}else{
			try {
				backword.lockInterruptibly();
				Thread.sleep(1000);
				forward.lockInterruptibly();
			} catch (InterruptedException e) {
				e.printStackTrace();
			}finally{
				if(backword.isHeldByCurrentThread()){
					backword.unlock();
				}
				if(forward.isHeldByCurrentThread()){
					forward.unlock();
				}
			}
		}
	}
	
	
	public static void main(String[] args) {
		Thread c1 = new DeadLockCar(DeadLockCar.forward);
		Thread c2 = new DeadLockCar(DeadLockCar.backword);
		c1.start();
		c2.start();
	}
}

 

 

 

两个线程类:

public class DeadLock{
	public static void main(String[] args) {
		Object obj1 = new Object();
		Object obj2 = new Object();
		Thread t1 = new LockA(obj1,obj2);
		Thread t2 = new LockB(obj1,obj2);
		t1.start();
		t2.start();
	}
}

class LockA extends Thread {
	private Object obj1;
	private Object obj2;
	public LockA(Object obj1,Object obj2){
		this.obj1 = obj1;
		this.obj2 = obj2;
	}
	
	public void run(){
		synchronized(obj1){
			try {
				Thread.sleep(1000);
			} catch (InterruptedException e) {
				e.printStackTrace();
			}
			synchronized(obj2){
				System.out.println("Lock A");
			}
		}
	}
}

class LockB extends Thread {
	private Object obj1;
	private Object obj2;
	public LockB(Object obj1,Object obj2){
		this.obj1 = obj1;
		this.obj2 = obj2;
	}
	
	public void run(){
		synchronized(obj2){
			try {
				Thread.sleep(1000);
			} catch (InterruptedException e) {
				e.printStackTrace();
			}
			synchronized(obj1){
				System.out.println("Lock B");
			}
		}
	}
}

 

 

 

 

 

 

分享到:
评论

相关推荐

    java 一个死锁的例子

    java 一个死锁的例子 java 一个死锁的例子 java 一个死锁的例子

    线程死锁的例子

    有简单的控制台例子理解线程死锁的概念。并且理解线程是轮换CPU时间片的。

    一个简单的和死锁有关的程序

    这是和死锁有关的问题,和简单的一个例子!

    一个Java死锁程序.pdf

    关于java中死锁的介绍。synchronized的一个简单例子

    基于Petri网的并发编程死锁预防策略 (2012年)

    针对并发编程中的死锁问题,提出了一种具有同步信号的并发程序的Petri网模型――S3PS(简单连续信号进程系统)网,这种Petri网子类保持活性的充分必要条件是它的虹吸非空.在此基础上,通过对严格极小虹吸加入控制弧...

    深入浅出SQLServer中的死锁

    由这个简单的例子可以看出,发生死锁需要四个必要条件,如下:主体对于资源是独占的,图1中每条汽车道只能跑一队汽车,不能跑第二队。指主体已经保持至少一个资源,但又提出了新的资源请求,而该

    举例讲解Python中的死锁、可重入锁和互斥锁

    简单来说,死锁是一个资源被多次调用,而多次调用方都未能释放该资源就会造成死锁,这里结合例子说明下两种常见的死锁情况。 1、迭代死锁 该情况是一个线程“迭代”请求同一个资源,直接就会造成死锁: import ...

    java线程死锁代码示例

    主要介绍了java线程死锁代码示例,分享了一个简单线程死锁的例子,需要的朋友可以参考下。

    c++多线程之死锁的发生的情况解析(包含两个归纳,6个示例)

    主要介绍了c++多线程之死锁的发生的情况解析(包含两个归纳,6个示例),需要的朋友可以参考下

    Java 解决死锁的方法实例详解

    主要介绍了java 多线程死锁详解及简单实例的相关资料,需要的朋友可以参考下

    浅谈python锁与死锁问题

    如果你学过操作系统,那么对于锁应该不陌生。锁的含义是线程锁,可以用来指定某一...其实它的使用场景非常广,我们举一个非常简单的例子,就是淘宝买东西。我们都知道商家的库存都是有限的,卖掉一个少一个。假如说当前

    简单说明Oracle数据库中对死锁的查询及解决方法

    主要介绍了Oracle数据库中对死锁的查询及解决方法,文中用两个表创造死锁的简单例子来说明对死锁的撤销方法,需要的朋友可以参考下

    oracle学习文档 笔记 全面 深刻 详细 通俗易懂 doc word格式 清晰 连接字符串

    简单来说是本身可视为电子化的文件柜——存储电子文件的处所,用户可以对文件中的数据运行新增、截取、更新、删除等操作。 常见的数据模型 1. 层次结构模型: 层次结构模型实质上是一种有根结点的定向有序树,IMS...

    VHDL设计简单例程100例

    VHDL设计简单例程100例,简单入门VHDL语言100例 第1例 带控制端口的加法器 第2例 无控制端口的加法器 第3例 乘法器 第4例 比较器 第5例 二路选择器 第6例 寄存器 第7例 移位寄存器 第8例 综合单元库 第9例 七值逻辑与...

    java 多线程设计模式 进程详解

    简单的同步例子 一个网络服务器类 AsyncInputStream类 使用TCPServer和AsynclnputStream 总结 第六章 Java线程调度 线程调度概述 何时调度是重要的 调度和线程优先级 常见的调度实现 本地调度支持 其他线程调度...

    分布式系统领域教程pdf

    5.3 一个死锁预防的例子:分布式数据库 系统 5.4 死锁避免 5.5 一个死锁避免的例子:多机器人的 灵活装配单元 5.6 死锁检测和恢复 5.6.1 集中式方法 5.6.2 分布式方法 5.6.3 等级式方法 5.7 死锁检测和恢复的...

    Su04_Concurrency:类中并发主题的代码示例

    死锁:死锁的简单示例。 no03_parallelworkers:启动将启动多个Worker。 可视化多个线程之间的切换。 no03_parallelworkers.withjoin:等待启动和工作者的各个线程。 no04_account:“银行帐户”示例,说明了为...

    《计算机操作系统》期末复习指导

    优点是实现互斥简单;缺点是效率很低。 •信号量(Semaphore)及PV操作 PV操作能够实现对临界区的管理要求。它由P操作原语和V操作原语组成,对信号量进行操作,具体定义如下: P(S):①将信号量S...

    分布式系统设计 [美]jie wu著 高传善 译

    5.3 一个死锁预防的例子:分布式数据库 系统 5.4 死锁避免 5.5 一个死锁避免的例子:多机器人的 灵活装配单元 5.6 死锁检测和恢复 5.6.1 集中式方法 5.6.2 分布式方法 5.6.3 等级式方法 5.7 死锁检测和恢复的...

Global site tag (gtag.js) - Google Analytics