死锁

来源:互联网 发布:什么是java分布式 编辑:程序博客网 时间:2024/05/29 07:20
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;// 声明标价,用于判断哪个对象先执行@Overridepublic void run() { //覆写run()方法// TODO Auto-generated method stubif (flag) {   //判断标志位synchronized (zs) { //通过第一个对象zs.say();     //调用方法try {Thread.sleep(500);// 加入延迟} catch (InterruptedException e) {// TODO Auto-generated catch blocke.printStackTrace();}synchronized (ls) {  //同步第二个对象zs.get();   //调用方法}}} else {     //Lisi先执行synchronized (ls) { //同步第二个对象ls.say();    //调用方法}}try {Thread.sleep(500);} catch (InterruptedException e) {// TODO Auto-generated catch blocke.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();}}