多线程死锁例子
来源:互联网 发布:sql2000备份数据库 编辑:程序博客网 时间:2024/04/28 10:30
一.例子
两个资源对象o1,o2,两个线程t1,t2。
设置t1的初始条件为真,线程启动后。t1获取o1锁,然后等待o2。然后获取o2锁,然后释放o2锁。接着释放o1锁。程序结束
设置t2的初始条件为真,线程启动后。t2获取o2锁,然后等待o1。然后获取o1锁,然后释放o1锁。接着释放o2锁。程序结束
public class DeadLocker {public static void main(String[] args) {DeadLock t1 = new DeadLock();t1.setName("线程1");DeadLock t2 = new DeadLock();t2.setName("线程2");t1.flag = true;t2.flag = false;t1.start();t2.start();}}class DeadLock extends Thread {public boolean flag = true;static Object o1 = new Object();// 定义两个公共资源static Object o2 = new Object();@Overridepublic void run() {// TODO Auto-generated method stubif (flag) {System.out.println(Thread.currentThread().getName() + "等待o1");synchronized (o1) {System.out.println(Thread.currentThread().getName() + "占用o1,等待o2");synchronized (o2) {System.out.println(Thread.currentThread().getName() + "占用o2");}System.out.println(Thread.currentThread().getName() + "释放o2");}System.out.println(Thread.currentThread().getName() + "释放o1");} else {System.out.println(Thread.currentThread().getName() + "等待o2");synchronized (o2) {System.out.println(Thread.currentThread().getName() + "占用o2,等待o1");synchronized (o1) {System.out.println(Thread.currentThread().getName() + "占用o1");}System.out.println(Thread.currentThread().getName() + "释放o1");}System.out.println(Thread.currentThread().getName() + "释放o2");}}}
二.结果
不出现死锁的一种情况
出现死锁的情况
参考http://blog.csdn.net/rebelqsp/article/details/23550019
0 0
- java多线程死锁例子
- 多线程死锁例子
- 多线程造成死锁的例子
- Java多线程死锁的例子
- Java多线程探究-死锁例子
- java多线程发生死锁的一个例子
- 【Java多线程】之七:死锁例子
- 多线程——死锁的例子
- 多线程死锁的一个简单例子
- Java多线程____线程死锁例子
- java多线程之死锁的例子
- 死锁例子
- 死锁例子
- 死锁例子
- 死锁例子
- 一个多线程的死锁和锁争用的例子
- java学习--多线程发生死锁的一个例子
- 浅谈 Java 多线程环境下 如何跟踪死锁 (例子)
- linux文件管理 cp mv mkdir rm rmdir
- eventbus指定接收者
- NYoj-58最少步数
- 从Linux源码安装过程,认识源码安装
- 提高工作效率的三个方法
- 多线程死锁例子
- for语句
- OkHttp源码解析(四)——失败重连
- 关于java线程池和相关
- IDL出现% Program caused arithmetic error: Floating illegal operand 错误!!
- 多线程编程 RW_LOCK 读写锁
- Thinking in Java——第二章-一切都是对象
- 使用 IOS7 原生API进行二维码条形码的扫描
- eclipse最常用快捷键整理