Java代码模拟死锁 多线程
2015-10-10 08:59
531 查看
题目描述
Java代码模拟死锁死锁条件
互斥使用:一个资源只能分配给一个线程不可剥夺:资源只能由占有者释放,申请者不能强制剥夺
请求保持:线程申请资源时,保持对原有资源的占有
循环等待:存在一个进程等待队列:{P1 , P2 , … , Pn}, 其中P1等待P2占有的资源,P2等待P3占有的资源,…,Pn等待P1占有的资源,形成一个进程等待环路
代码
[code]public class DeadLock implements Runnable { // flag=1,占有对象o1,等待对象o2 // flag=0,占有对象o2,等待对象o1 public int flag = 1; // 定义两个Object对象,模拟两个线程占有的资源 public static Object o1 = new Object(); public static Object o2 = new Object(); public static void main(String[] args) { DeadLock deadLock1 = new DeadLock(); DeadLock deadLock2 = new DeadLock(); deadLock1.flag = 0; deadLock2.flag = 1; Thread thread1 = new Thread(deadLock1); Thread thread2 = new Thread(deadLock2); thread1.start(); thread2.start(); } public void run() { System.out.println("flag: " + flag); if (flag == 1) { synchronized (o1) { try { Thread.sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); } synchronized (o2) { System.out.println("1"); } } } else if (flag == 0) { synchronized (o2) { try { Thread.sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); } synchronized (o1) { System.out.println("0"); } } } } }
相关文章推荐
- 获取Spring管理的Bean方法
- Java常用的一些多媒体文件基本操作方法简介
- Java类加载器总结
- eclipse部署web项目方法
- java之文件的编码详解
- 【Java EE 学习 54】【OA项目第一天】【SSH事务管理不能回滚问题解决】【struts2流程回顾】
- Java基础知识强化之集合框架笔记61:Map集合之统计字符串中每个字符出现的次数的案例
- JAVA设计模式之单例模式
- Java基础:this关键字、super关键字
- eclipse导入项目中文乱码解决
- Java基础:GC的工作原理
- java编程接口(6) ------ 图标
- Java8 Lambda表达应用 -- 单线程游戏server+异步数据库操作
- java.lang.OutOfMemoryError: PermGen space
- spring mvc拦截器和<mvc:annotation-driven />的详解
- 浅谈方法重写 super
- struts配置 WEB得拷贝要注意的事项
- Java环境配置之javac不是内部或外部命令
- 两个数组求和为一个固定数值的所有组合java实现
- Reverse Second half of LinkedList Java实现