Java 是否可以同时使用线程使用者/生产者?
我有一系列关于消费者/生产者问题的问题Java 是否可以同时使用线程使用者/生产者?,java,multithreading,Java,Multithreading,我有一系列关于消费者/生产者问题的问题 可以同时创建线程消费者和生产者吗 在线程之间发送/接收数据的最佳块队列类型是什么 是否可以将线程之间的传输限制为一组线程实例?怎么做 谢谢 第一个问题。我认为封锁德克是解决办法。 以下是一些解释: 对。通常,如果线程既是消费者又是生产者,那么它使用的“产品”与生产者不同,但它也可以使用自己的产品 取决于消息的特征和传输速率。但通常好处是微不足道的 是-只需将队列传递给相关方即可 对。通常,如果线程既是消费者又是生产者,那么它使用的“产品”与生产者不同,但它
要补充阿列克谢的回答:
LinkedBlockingQueue
最大限度地减少了制作者端的阻塞,但如果使用者的工作速度比制作者慢得多(例如,使用者对制作者的输入进行一些长时间的计算),它的使用可能会导致内存耗尽。因此,您可能需要ArrayBlockingQueue
,它是有界的,因此不会导致OutOfMemory错误要补充阿列克谢的回答:
LinkedBlockingQueue
最大限度地减少了制作者端的阻塞,但如果使用者的工作速度比制作者慢得多(例如,使用者对制作者的输入进行一些长时间的计算),它的使用可能会导致内存耗尽。因此,您可能需要ArrayBlockingQueue
,它是有界的,因此不会导致OutOfMemory错误这种并发模式有时被称为“工作列表”。例如,通过递归搜索目录来搜索文件中的特定字符串可以实现为保留一个并发结构(工作列表),以保存仍然需要搜索的目录。每个工作线程从列表中获取一个项目,对其执行操作,并可能将children目录放回工作列表中,由其自身或另一个工作线程处理。这种并发模式有时称为“工作列表”…例如,通过递归搜索目录来搜索文件中的特定字符串可以实现为保留一个并发结构(工作列表),以保存仍需要搜索的目录。每个工作线程从列表中获取一个项目,并对其执行某些操作,还可能将children目录放回工作列表中,由其自身或另一个工作线程进行处理。问题3:如果一个实例采用两个队列路径该怎么办。。一个来自队列1,另一个来自队列2,如路由器。。在子网之间..我认为“交换器”在我创建路由器的情况下会起作用。下面是一个示例:对于问题3:如果一个实例采用两条队列路径,该怎么办。。一个来自队列1,另一个来自队列2,如路由器。。在子网之间..我认为“交换器”在我创建路由器的情况下会起作用。以下是一个例子: