在Java中调用线程内的线程时需要考虑什么或应该避免?

时间:2011-11-23 12:55:26

标签: java multithreading

我正在尝试使用多线程,实际上是一个线程池,用于一大组并发任务。不幸的是,线程需要使用的工具也是通过使用线程实现的,它由第三方提供。在线程内部使用线程是否安全?应该考虑什么或者应该完全避免它。

4 个答案:

答案 0 :(得分:2)

  

应该考虑什么,或者应该完全避免。

需要考虑以下几点:

  • 线程资源很耗力。
  • 线程创建很昂贵。
  • 线程池改善了线程创建的成本,但是在某些情况下,有界线程池可能会导致致命问题。
  • 除非你的算法明智地使用线程,否则线程不利于解决分而治之的问题。 (不要使用/废弃线程,你应该使用递归。)

我所谈论的致命问题是线程递归地分叉其他线程并等待它们完成。如果使用无界线程池,则最终可能会出现不合理的线程数。如果你使用有界线程池,你可能会以死锁形式结束,所有线程都在使用中,并且(可能)所有线程都被阻塞,等待创建更多线程。

(听起来你的情景中有可能存在这种情况。)

答案 1 :(得分:1)

  

在线程内部使用线程是否安全?

如果库是线程安全的,您应该能够从多个线程中使用它。

  

应该考虑什么,或者应该完全避免。

如上所述,您应确保所涉及的所有类(库类和您的类)都是线程安全的。

就个人而言,我试图完全避免使用多个线程,至少使用高级构造,例如使用java.util.concurrent包中的类。

您可能想要阅读

答案 2 :(得分:1)

所有线程都在“内部”其他线程中使用。 (除了你开始的那些)

也许你可以更详细地解释你的疑问。

答案 3 :(得分:0)

我认为没有'Thread in a Thread'这样的概念 所有线程都由某个线程或其他线程调用。 (除了很少明显) 所以他们都有点并行工作。