多线程应用程序 - 帮助一些伪代码!

时间:2010-04-14 18:49:04

标签: java multithreading concurrency

我正在研究多线程应用程序,需要一些伪代码的帮助。为了使实现更简单,我将尝试用简单的术语/测试用例来解释。

以下是情景 -

我有一个字符串数组列表(比如100个字符串)

我有一个Reader类,它读取字符串并将它们传递给Writer类,该类将字符串打印到控制台。现在,它运行在单线程模型中。

我想制作这个多线程但具有以下功能 -

能够设置MAX_READERS

能够设置MAX_WRITERS

能够设置BATCH_SIZE

所以基本上代码应该实例化那些许多读者和写作者并且并行完成工作。

任何伪代码都会让我继续前进!

2 个答案:

答案 0 :(得分:3)

这听起来像是传统的消费者 - 生产者问题。看一下Wikipedia's article。他们有很多伪代码。

答案 1 :(得分:0)

除了使用已建议的producer-consumer pattern之外,我建议您使用CopyOnWriteArrayList,这样您就可以对列表进行无锁读/写/迭代。由于您只使用了几百个字符串,因此CopyOnWriteArrayList可能不存在性能问题。

如果您关注性能,那么我实际上认为如果您使用BlockingQueueConcurrentHashMap可能会更好。它们将允许您使用多线程应用程序最大化吞吐量。


推荐选项:
BlockingQueue适用于多个生产者和消费者,但当然它意味着数据处理(FIFO)的顺序。如果你对FIFO排序没问题,那么你可能会发现BlockingQueue是一个更快更强大的选项。


我认为维基百科文章有足够的伪代码供您使用,但您也可以查看以下一些SO问题:
https://stackoverflow.com/search?q=java+producer+consumer

Java Producer-Consumer Designs:
Producer/Consumer threads using a Queue
design of a Producer/Consumer app