gpt4 book ai didi

java - 对一个生产者 - 许多消费者应用程序使用 protected block

转载 作者:行者123 更新时间:2023-12-01 05:48:00 25 4
gpt4 key购买 nike

已关注 this example在 Java(tm) 教程中,我在 Delphi 2009 中实现了这一基本的“一生产者一消费者”应用程序(引入了对象锁)。

现在我想扩展它,以便多个消费者线程从 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() 方法,要么发布 DONE 的次数与消费者的数量相同。

除此之外,没有任何风险。

但是,如果您希望提高生产者-消费者的吞吐量,您可以考虑使用可以同时保存多个值的类 - 某种队列,例如 JDK 中的 BlockingQueue 。这样您的生产者和消费者就不会像此代码示例中那样经常被阻止。

关于java - 对一个生产者 - 许多消费者应用程序使用 protected block ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5443911/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com