多线程新手 - 最具成本效益的多线程方式?

时间:2013-01-02 15:55:31

标签: java multithreading queue irc

所以我在小型应用程序中使用过多线程。在这里创建一个新线程,一个新线程。

我目前正在开发一个监控IRC聊天的程序。对于每个有效的命令,它创建一个线程,做一些工作,并将结果输出到聊天。有时,应用程序将在短时间内获得10个或更多有效命令,并创建10个或更多线程。应用程序开始变慢。我已经读过创建和关闭线程对资源的成本效率非常低,所以我想改变我的方法。

我有一个想法是创建一些线程(大约5个左右?),这些线程总是运行一个方法,我将命令传递给它,以FIFO为基础对它们进行排队。在我实现之前,我想看看是否有更好的东西我应该使用。当然,我不想逃跑并重新发明轮子。

1 个答案:

答案 0 :(得分:6)

您可以使用固定大小的ExecutorService线程轮询。提交每条消息作为任务发送,它们将被发送,因为有一个免费的线程。 e.g。

ExecutorService es = Executors.newFixedThreadPool(5);

注意:这可能会导致邮件无序发送,因此您的客户端应该能够根据时间戳对邮件重新排序。


顺便说一句:如果10个命令一次显然很慢,那就不是创建会导致这种情况的线程。线程是昂贵的,但不是那么昂贵。相反,它可能会出现网络延迟或其他阻塞操作。如果网络连接不良,您可能需要为每个客户端创建qa队列。