Java:wait()不会释放锁定。为什么?

时间:2019-01-21 14:49:58

标签: java java.util.concurrent

我的代码在“生产者启动”处停止。为什么wait()无法释放锁?我在同步部分中使用了同一对象,但是它不起作用。

class Processor {
    public void produce() throws InterruptedException {
        synchronized (this) {
            System.out.println("Producer started");
            wait();
            System.out.println("Producer ended");
        }
    }

    public void consume() throws InterruptedException {
        System.out.println("Consumer started");
        Scanner scanner = new Scanner(System.in);
        synchronized (this) {
            scanner.nextLine();
            System.out.println("go to producer");
            notify();
            Thread.sleep(1000);
            System.out.println("Consumer ended");
        }
    }
}

虽然我在不同的线程中运行此代码,但我使用的是相同的Processor对象

public class Main {
    public static void main(String[] args) throws InterruptedException {
        Processor processor = new Processor();

        Thread t1 = new Thread(() -> {
            try {
                processor.produce();
            } catch (InterruptedException e) {}
        });

        Thread t2 = new Thread(() -> {
            try {
                processor.consume();
            } catch (InterruptedException e) {}
        });

        t1.run();
        t2.run();
        t1.join();
        t2.join();
    }
}

2 个答案:

答案 0 :(得分:2)

也许尝试:

t1.start ();
t2.start ();

代替

t1.run ();
t2.run ();

答案 1 :(得分:0)

这里的问题是您在Threads上调用run()方法。如果要在单独的线程中运行,请使用start()。