我已经制作了两个类别的生产者和消费者。Producer类创建线程并将项目推送到阻塞队列,而使用者类也创建线程,从阻塞队列中获取项。
现在,我想知道一件事。我应该在生产者或消费者类中定义阻塞队列吗?还是应该是在生产者和消费者中都定义的单例对象?
如果我只在一个类中定义,那么我可以通过从另一个类调用该类的方法来访问阻塞队列。这种类型将阻塞队列数据结构封装在该类中,我们只通过使用这些方法来访问该数据结构。但是,我发现通过方法调用看起来就像,一个类依赖于另一个类。
如果我创建一个单例阻塞队列,那么阻塞队列对象将在两个类之间共享。但是我认为在类之间共享集合是不好的做法,让用户知道如何在每个类中使用集合。我不确定这是否真的是一种糟糕的做法。
请提供您对哪一种方式更好的见解?谢谢你的帮助。
发布于 2019-06-07 07:44:52
应该在producer类中实例化阻塞队列,因为生产者实际上控制了这个集合。消费者会告诉生产者生产。生产者不返回成品,而是返回阻塞集合,并在完成生产后将其设置为完成。这样,使用者就可以迭代阻塞集合,并知道何时中断此迭代。根据这个流程,我将在生产者范围内实例化阻塞集合。但这并不重要。否则,生产者将在创建的集合中接受外部范围中的参数。这是一个品味的问题,我认为让制片人归还收藏品是更清洁的做法。
我更喜欢a)
BlockingQueue result = producer.produce();
while (!result.isCompleted) {}(超过b)
BlockingQueue result = new BlockingQueue();
producer.produce(result);
while (!result.isCompleted) {}由于Java现在不引用(只引用引用的副本),所以使用我喜欢的解决方案a)将给生产者在任何时候覆盖BlockingQueue的所有自由,而不会给消费者带来麻烦。
单身不是好做法,应尽可能避免:
https://stackoverflow.com/questions/56489208
复制相似问题