死锁的案例

来源:互联网 发布:win10网络凭证 编辑:程序博客网 时间:2024/06/03 10:01

当多线程处理共享数据时,就会涉及到线程安全问题,采用同步代码块或者同步方法,资源交错,操作不当会产生死锁问题!如下是一个死锁的案例,仅供参考

class BreadMilk implements Runnable {private String milk = "牛奶";// 保证有一份private String bread = "面包";boolean flag;// true,t1,执行,false,t2执行@Overridepublic void run() {if (flag) {// t1线程执行synchronized (milk) {System.out.println(Thread.currentThread().getName() + ",已经拥有了"+ milk);try {Thread.sleep(10);} catch (InterruptedException e) {// TODO Auto-generated catch blocke.printStackTrace();}synchronized (bread) {System.out.println(Thread.currentThread().getName()+ ",即拥有" + milk + ",又拥有" + bread);}}} else {// t2线程执行synchronized (bread) {System.out.println(Thread.currentThread().getName() + ",已经拥有了"+ bread);try {Thread.sleep(10);} catch (InterruptedException e) {// TODO Auto-generated catch blocke.printStackTrace();}synchronized (milk) {System.out.println(Thread.currentThread().getName()+ ",即拥有" + bread + ",又拥有" + milk);}}}}}public class DeadLock {public static void main(String[] args) {BreadMilk mt1 = new BreadMilk();BreadMilk mt2 = new BreadMilk();mt1.flag = true;mt2.flag = false;Thread t1 = new Thread(mt1, "张三");Thread t2 = new Thread(mt2, "李四");t1.start();t2.start();}}


0 0