使用多线程读取信息

时间:2014-07-10 21:27:03

标签: java multithreading sockets threadpool batch-processing

我有下一个场景:

  1. 服务器从Socket发送大量信息,因此我需要阅读此信息并对其进行验证。这个想法是使用20个线程和批处理,每次批处理大小为20时,线程必须将信息发送到数据库并继续从套接字读取等待更多。
  2. 我不知道这是最好的方法,我在想:

    1. 创建一个将读取信息的Socket
    2. 创建执行程序(Executors.newFixedThreadPool(20))并验证de信息,并将每行添加到列表中,当大小为20时,执行将信息发送到数据库的Runnable类。
    3. 先谢谢你的帮助。

1 个答案:

答案 0 :(得分:3)

你不想用一大堆线程来做这件事。你最好只使用两个线程的生产者 - 消费者模型。

生产者线程从套接字读取记录并将它们放在队列中。这就是它的全部内容:读取记录,添加到队列,读取下一条记录。泡沫,冲洗,重复。

使用者线程从队列中读取记录,验证它并将其写入数据库。如果要批量项目以便一次向数据库写入20,则可以让使用者将记录添加到列表中,当列表达到20时,执行数据库更新。

您可能希望在生产者 - 消费者计划中查找有关使用Java BlockingQueue的信息。

你说你可能每天从套接字中获得一百万条记录。这只是每秒12条记录。除非您的验证是处理器密集型的,否则单个线程可能每秒处理1,200条记录,没有任何问题。

无论如何,您的主要瓶颈将是数据库更新,这可能不会从多个线程中受益。