叫什么就是什么 2017-04-24 02:51 采纳率: 50%
浏览 988

程序出现死锁了,为什么?


public class Test {
    private Object mutex = new Object();
    private volatile boolean isEmpty = true;
    private volatile boolean isFull = false;
    private String buffer = null;

    public static void main(String[] args) {
        new Test().start();
    }

    public void start() {
        Thread consumer = new Thread(new Consumer(mutex));
        Thread producer = new Thread(new Producer(mutex));
        consumer.start();
        producer.start();
    }

    class Producer implements Runnable {

        private Object mutex = null;

        public Producer(Object mutex) {
            this.mutex = mutex;
        }

        @Override
        public void run() {
            int count = 0;
            while (true) {
                while (isFull) {
                    try {
                        synchronized (mutex) {
                            mutex.wait();
                        }
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                }
                buffer = "" + ++count;
                System.out.println(Thread.currentThread().getName() + " produce " + buffer);
                isFull = true;
                isEmpty = false;
                synchronized (mutex) {
                    mutex.notifyAll();
                }
            }
        }
    }

    class Consumer implements Runnable {
        private Object mutex = null;

        public Consumer(Object mutex) {
            this.mutex = mutex;
        }

        @Override
        public void run() {
            while (true) {
                while (isEmpty) {
                    try {
                        synchronized (mutex) {
                            mutex.wait();
                        }
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                }
                System.out.println(Thread.currentThread().getName() + " consume " + buffer);
                buffer = null;
                isEmpty = true;
                isFull = false;
                synchronized (mutex) {
                    mutex.notifyAll();
                }
            }
        }
    }
}
  • 写回答

2条回答 默认 最新

  • YXTS122 2017-04-24 05:18
    关注

    出现死锁,是个什么情况。。。。。。

    评论

报告相同问题?

悬赏问题

  • ¥20 delta降尺度方法,未来数据怎么降尺度
  • ¥15 c# 使用NPOI快速将datatable数据导入excel中指定sheet,要求快速高效
  • ¥15 再不同版本的系统上,TCP传输速度不一致
  • ¥15 高德地图点聚合中Marker的位置无法实时更新
  • ¥15 DIFY API Endpoint 问题。
  • ¥20 sub地址DHCP问题
  • ¥15 delta降尺度计算的一些细节,有偿
  • ¥15 Arduino红外遥控代码有问题
  • ¥15 数值计算离散正交多项式
  • ¥30 数值计算均差系数编程