请分析此例子为什么会出现死锁?

来源:互联网 发布:黄金时代知乎 编辑:程序博客网 时间:2024/05/17 22:34

程序中若要进行资源共享就要进行同步(synchronized()),但是同步用的过多就会出现死锁的现象!

public class DeadThread implements Runnable {    Bangjiafang b = new Bangjiafang();    GeGe g = new GeGe();    public DeadThread() {        new Thread(this).start();        b.say(g);    }    @Override    public void run() {        // TODO Auto-generated method stub        g.say(b);    }    public static void main(String[] args) {        new DeadThread();    }} class Bangjiafang {    public synchronized void say(GeGe g) {        System.out.println("给我500W,放你妹");        g.fun();    }    public synchronized void fun() {        System.out.println("绑架犯得到了500w,放了妹妹");    }}class GeGe {    public synchronized void say(Bangjiafang b) {        System.out.println("放妹,给你500w");        b.fun();    }    public synchronized void fun() {        System.out.println("哥哥救出妹妹,损失了500w");    }}

运行后

给我500W,放你妹放妹,给你500w

绑架犯既没有得到500w,哥哥也没有救出妹妹,双方一直是处于一种等待僵持的状态,即所谓线程死锁。

阅读全文
0 0
原创粉丝点击