您的位置:首页 > 编程语言 > Java开发

Java线程的死锁

2014-10-31 15:14 274 查看
package com.meson.threaddeadlock.test;

/*
* @ meson
*
* 死锁的列子
*
* 张三向李四要书
* 李四向张三要画
*/
class Zhangsan {//张三类
//索要图书
public void say() {
System.out.println("张三对李四说你给我书我把画给你");
}
//得到书
public void get() {
System.out.println("Zhangsan得到了书!!");
}
};

class Lisi {//李四类
//索要画
public void say() {
System.out.println("李四对张三说你 给我画我把书给你");
}
//得到画
public void get() {
System.out.println("Lisi得打了画");
}
};

public class ThreadDeadLock  implements Runnable{//线程类

public  boolean flag = false;//一个判断标识 判断谁先说话
private static Zhangsan z = new Zhangsan();
private  static Lisi l = new Lisi();

@Override
public void run() {//重写run方法
// TODO Auto-generated method stub

if (flag) {//true 张三先说话
synchronized (z) {//同步张三 别的程序不能操作
z.say();

//睡眠 一段时间
try {
Thread.sleep(500);

} catch (InterruptedException e) {
e.printStackTrace();
}

// 锁定李四 别的程序不能操作
//张三从李四手中得到画
synchronized (l){
z.get();
}
}

} else {
synchronized (l) {//false李四先说话 同步李四 别的 不能进行操作
l.say();

//睡眠一段时间
try {
Thread.sleep(500);
} catch (InterruptedException e) {
e.printStackTrace();
}
synchronized (z) {//得到画 同步张三才能得到张三手中的画
z.get();
}
}

}

}
public static void main(String[] args) {

ThreadDeadLock d1 = new ThreadDeadLock(    );
ThreadDeadLock d2 = new ThreadDeadLock();
d1.flag = true;
d2.flag = false;
Thread t1 = new Thread(d1);
Thread t2 = new Thread(d2);
//线程开始
t1.start();
t2.start();

}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: