我有下一个场景:
我不知道这是最好的方法,我在想:
Executors.newFixedThreadPool(20)
)并验证de信息,并将每行添加到列表中,当大小为20时,执行将信息发送到数据库的Runnable类。先谢谢你的帮助。
答案 0 :(得分:3)
你不想用一大堆线程来做这件事。你最好只使用两个线程的生产者 - 消费者模型。
生产者线程从套接字读取记录并将它们放在队列中。这就是它的全部内容:读取记录,添加到队列,读取下一条记录。泡沫,冲洗,重复。
使用者线程从队列中读取记录,验证它并将其写入数据库。如果要批量项目以便一次向数据库写入20,则可以让使用者将记录添加到列表中,当列表达到20时,执行数据库更新。
您可能希望在生产者 - 消费者计划中查找有关使用Java BlockingQueue
的信息。
你说你可能每天从套接字中获得一百万条记录。这只是每秒12条记录。除非您的验证是处理器密集型的,否则单个线程可能每秒处理1,200条记录,没有任何问题。
无论如何,您的主要瓶颈将是数据库更新,这可能不会从多个线程中受益。