多线程死锁的模拟
来源:互联网 发布:c语言标识符和关键字 编辑:程序博客网 时间:2024/05/16 15:08
死锁的原因:
线程1锁住资源A等待资源B,线程2锁住资源B等待资源A,两个线程
都在等待自己需要的资源,而这些资源被另外的线程锁住,这些线
程你等我,我等你,谁也不愿意让出资源,这样死锁就产生了。
哲学家进餐问题
所线程要尽量避免死锁现象的产生
线程1锁住资源A等待资源B,线程2锁住资源B等待资源A,两个线程
都在等待自己需要的资源,而这些资源被另外的线程锁住,这些线
程你等我,我等你,谁也不愿意让出资源,这样死锁就产生了。
哲学家进餐问题
解决死锁的办法之一就是:加大锁的粒度。
package com.qianfeng.TreadTest02;public class DeadLock02 {// 绑匪:说:你给我500亿,我就放了你儿子,目的:得到了500亿// 富翁:说:你先放了我儿子,,我就给你钱,目的:赎回儿子。public static void main(String[] args) {MyThread02 mt1 = new MyThread02();MyThread02 mt2 = new MyThread02();mt1.flag = true;mt2.flag = false;new Thread(mt1).start();new Thread(mt2).start();}}class Kidnapper{public void say(){System.out.println("你给我500亿,我就放了你儿子");}public void get(){System.out.println("得到了500亿");}}class Richman{public void say(){System.out.println("你先放了我儿子,,我就给你钱");}public void get(){System.out.println("赎回儿子");}}class MyThread02 implements Runnable{private static Kidnapper k = new Kidnapper();private static Richman r = new Richman();boolean flag = true;@Overridepublic void run() {if(flag){//kidnappersynchronized (k) {k.say();try {Thread.sleep(100);} catch (InterruptedException e) {// TODO Auto-generated catch blocke.printStackTrace();}synchronized (r) {k.get();}}}else{//richmansynchronized (r) {r.say();try {Thread.sleep(100);} catch (InterruptedException e) {// TODO Auto-generated catch blocke.printStackTrace();}synchronized (k) {r.get();}}}}}
所线程要尽量避免死锁现象的产生
0 0
- 多线程死锁的模拟
- 一个模拟死锁的多线程
- 【重点】模拟多线程死锁
- Java 模拟多线程死锁
- java多线程之模拟死锁
- java多线程 模拟死锁程序
- Java代码模拟死锁 多线程
- Java多线程死锁情况模拟
- java多线程学习之死锁的模拟和避免
- 简单的死锁模拟
- 模拟死锁的产生
- 多线程死锁的解决之道
- 多线程的死锁
- 多线程的死锁程序
- Java多线程的死锁
- 对多线程死锁的浅析
- C#多线程的死锁演示
- 对多线程死锁的浅析
- friend ostream& operator <<(ostream& out,const Money& x)
- c#多线程
- 梅尔频率倒谱系数(MFCC)讲解
- 【网站安全】自定义MD5加强安全性
- webservice实例--cxf2.7
- 多线程死锁的模拟
- win7下硬盘安装ubuntu(EasyBCD法)
- eclipse Maven配置以及使用方法
- 缺失了大数据,谈不上是真正的O2O
- vc获取CPU ID
- SDWebImage-ProgressBar
- Jackson 高性能的JSON处理 android/移动开发必备jackson
- php gb2312转big5 函数
- 动态显示可输入的字数