Java 为一个生产者-多个消费者应用程序使用保护块

Java 为一个生产者-多个消费者应用程序使用保护块,java,synchronization,Java,Synchronization,在Javatm教程之后,我在Delphi2009中实现了这个基本的一生产者一消费者应用程序,它引入了对象锁 现在,我想扩展它,以便多个使用者线程从Drop实例获取消息。与Java教程示例相比,唯一的代码更改是main方法: public class ProducerConsumerExample { public static void main(String[] args) { Drop drop = new Drop(); (new Thread(

在Javatm教程之后,我在Delphi2009中实现了这个基本的一生产者一消费者应用程序,它引入了对象锁

现在,我想扩展它,以便多个使用者线程从Drop实例获取消息。与Java教程示例相比,唯一的代码更改是main方法:

public class ProducerConsumerExample {
    public static void main(String[] args) {

        Drop drop = new Drop();

        (new Thread(new Producer(drop))).start();

        (new Thread(new Consumer(drop))).start();
        (new Thread(new Consumer(drop))).start(); // <--- added
        (new Thread(new Consumer(drop))).start(); // <--- added 
    }
}
因此Drop类仍然有一个String类型的消息对象,所有运行的使用者都将竞争访问锁,并处理消息数据


此代码更改是否会带来风险,或者使用是否安全?

根据链接示例中的代码,您将无法阻止多个消费者。 所以,您要么需要将stop方法添加到consumer类中,要么将post方法添加到尽可能多的consumer类中

除此之外,没有风险

<>但是如果您希望增加生产者消费者的吞吐量,您可以考虑使用可以在一个时间内保存多个值的类——某种类型的队列,例如JDK的阻塞队列。这样,您的生产者和消费者就不会像本代码示例中那样经常被阻止