class Zhangsan {
public void say() {
System.out.println("张三对李四说:“你给我画,我就把书给你”。");
}
public void get() {
System.out.println("张三得到画了。");
}
}
class Lisi {
public void say() {
System.out.println("李四对张三说:“你给我画,我就把书给你”。");
}
public void get() {
System.out.println("李四得到画了。");
}
}
public class ThreadDeadLock implements Runnable {//定义多线程类
private static Zhangsan zs = new Zhangsan();// 实例化static型对象,数据共享
private static Lisi ls = new Lisi();// 实例化static型对象,数据共享
private boolean flag = false;// 声明标价,用于判断哪个对象先执行
@Override
public void run() { //覆写run()方法
// TODO Auto-generated method stub
if (flag) { //判断标志位
synchronized (zs) { //通过第一个对象
zs.say(); //调用方法
try {
Thread.sleep(500);// 加入延迟
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
synchronized (ls) { //同步第二个对象
zs.get(); //调用方法
}
}
} else { //Lisi先执行
synchronized (ls) { //同步第二个对象
ls.say(); //调用方法
}
}
try {
Thread.sleep(500);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
synchronized (zs) { //同步第一个对象
ls.get(); //调用方法
}
}
public static void main(String[] args) {
// TODO Auto-generated method stub
//实例化线程对象
ThreadDeadLock t1 = new ThreadDeadLock();
ThreadDeadLock t2 = new ThreadDeadLock();
t1.flag = true; //设置标价
t2.flag = false;//设置标准
Thread thA = new Thread(t1); //实例化Thread类对象
Thread thB = new Thread(t2);
thA.start(); //启动线程
thB.start();
}
}
死锁
最新推荐文章于 2025-04-22 13:49:06 发布