使用Runnable VS的单个实例创建多个线程。每个线程都有单独的实例

时间:2016-09-26 10:43:51

标签: java multithreading

为所有这些线程创建多个线程与Runnable的一个实例并为每个线程创建单独的实例之间有什么区别。什么时候应该使用第一种方法,何时使用第二种方法?你能给我一个例子,这样我可以更清楚地理解这两个概念吗?我发现很少有类似的话题,但我无法完全理解这两种方法之间的对比。

2 个答案:

答案 0 :(得分:1)

如果每个线程完全相同,则只能跨多个线程使用相同的Runnable。这很少有用。你可以让线程池中的线程以这种方式工作,但在这种情况下,我会使用内置的线程池,而不是编写自己的线程池。

如果您需要不同的线程以具有不同的状态,则每个线程需要不同的Runnable,因为Runnable保持状态。当您拥有需要处理不同数据的线程时,即使代码可能相同,这也很有用。

答案 1 :(得分:1)

  

有什么不同......?

差异--- 整个差异---如果Runnable类有一个或多个字段,那么这些字段将被共享通过几个线程,如果所有线程都被赋予相同的实例,并且如果每个线程都有自己的实例,则不会共享它们。

如果Runnable类没有声明任何字段,那么实际上没有任何区别。

基本上,您可以决定程序中哪些数据应该在线程之间共享以及哪些数据不应该共享。

如果所有Runnable字段都是共享的(即,如果您为每个线程使用相同的Runnable实例),那么这将使您更难获得< em>不分享。