在java程序中,我生成了一个主线程以外的线程,然后从我创建的原始线程(两个子线程)中生成了另外两个线程。在所有情况下,我使用Runnable接口来创建线程。我的问题是,有更好的方法吗?以递归方式生成线程时性能是否会降低?
答案 0 :(得分:7)
Java中的线程之间没有父子关系。一旦创建,他们就拥有了自己的生命。
关于性能,您可能希望使用ExecutorService来控制应用程序中创建的线程数。太多的线程肯定会杀死性能。请参阅Executors课程。
如果只是少数几个,你创建线程的方式是完全可以的。否则,执行程序服务是首选方法。
答案 1 :(得分:4)
您正在做的事情没有问题,没有性能下降。如果你有一个包含大量线程的更复杂的程序,你可以在java.util.concurrent
中查找实用程序类。
答案 2 :(得分:3)
以这种方式创建几个线程没有问题。
对于像网络IO这样的较慢的操作,它甚至相当不错,你可以退出很多线程,因为它们大部分都在等待。
对于数字运算线程,我使用使用Executors.newFixedThreadPool检索的ExecutorService和Runtime.numberOfProcessors()或类似的线程数量。如果处理受CPU限制,则更多线程只会降低效率。
此外,磁盘IO往往比并行更好。
如果您有CPU或磁盘IO约束处理器,您还可以查看BlockingQueue javadocs中描述的生产者 - 消费者模式。您的主线程(或线程)创建处理或加载任务并将其转储到阻塞队列。固定数量的工作线程处理队列中的项目。