JavaSE之手动模拟死锁
来源:互联网 发布:sql图书馆数据库设计 编辑:程序博客网 时间:2024/06/06 12:31
【死锁模拟】
什么是死锁?
通俗来讲死锁就像两个人,一个人买东西,一个人卖东西,买东西的人说:你给我东西我给你钱,卖东西的人说:你给我钱我给你东西。这俩人杠上了,这个时候没有一个人来调解,这俩人谁都不会善罢甘休。
官方的话来说,两个线程发生了资源竞争,都在等对方释放资源,这时候如果没有外力因素就会一直等下去,接下来有一个例子来模拟死锁。
//提供公共的锁对象class MyLock{ static MyLock lock1=new MyLock(); static MyLock lock2=new MyLock();}//死锁类实现class DeadClock implements Runnable{ private boolean flag; public DeadLock(){ } public DeadLock(boolean flag){ this.flag=flag; } public void run(){ if(flag==true){ synchronized(MyLock.lock1){ syso("拿到了锁1"); synchronized(MyLock.lock2){ syso("拿到了锁1和锁2"); } } }else{ synchronized(MyLock.lock2){ syso("拿到了锁2"); synchronized(MyLock.lock1){ syso("拿到了锁2和锁1"); } } } } //run} //DeadLock//测试类public class MyTest{ main(){ DeadLock d1=new DeadLock(true); DeadLock d2=new DeadLock(flase); Thread t1=new Thread(d1); Thread t2=new Thread(d2); t1.start(); t2.start(); }}
当然这是一个概率事件,多运行几次你就会发现,一个线程拿到锁1,另一个线程拿到锁2,这个时候程序没有结束,就发生了所谓的死锁现象,线程1等着线程2的锁,线程2等着线程1的锁。这就是小编所模拟的死锁,希望对大家有所帮助。
阅读全文
0 0
- JavaSE之手动模拟死锁
- java多线程之模拟死锁
- javaSE-线程死锁
- JavaSE 多线程 死锁示例
- 模拟死锁
- JAVASE总结--线程的死锁
- java多线程学习之死锁的模拟和避免
- C#模拟死锁问题
- 临界区死锁模拟.
- 死锁模拟和检测
- java模拟线程死锁
- 模拟线程死锁
- 【重点】模拟多线程死锁
- java 线程死锁模拟
- 多线程死锁的模拟
- 模拟线程死锁
- 简单的死锁模拟
- 线程-模拟死锁问题
- 数据结构笔记(C++描述)
- Mybatis(三)全局文件配置
- 计算机软件,硬件及软硬件接口的理解---以不同层次程序员的视角
- 清除浮动
- 侯捷:我对“程序人生”的看法
- JavaSE之手动模拟死锁
- 【Lunix】Lunix基础
- Java类的共同父类Object
- 面试感悟:3年工作经验java程序员应有的技能
- 单片机IO口状态详解
- Mac下解决mysql ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)
- php查询到的数据乱码和转json时中文变成了Unicode的编码。
- Android系统状态栏\沉浸状态栏
- Borg Maze POJ