2011-05-23 94 views
12

好日子所有,運行多個線程同時是它最好從一類來創建不同的線程對象或創建兩個類,其中一個實現Runnable和一個延伸的線,然後從他們兩個作爲創建線程對象假設我們試圖同時運行7到10個任務。運行多個線程同時

  1. 什麼是最好的解決辦法?..
  2. 是否有任何缺陷或性能下降,如果從單個類創建不同的線程對象?

謝謝。提示一如既往的讚賞。

+0

線程和進程是兩個不同的東西。如果你的意思是線程,那麼使用術語「線程」,而不是術語「過程」。 – 2011-05-23 14:42:42

+0

你真的指操作系統進程嗎?這就是過程通常在編程環境中的含義;如果你實際上意味着工作或任務,避免使用這個詞的過程,因爲它會混淆其他程序員。 – 2011-05-23 14:43:43

+0

哎呀,對不起,我的意思是線程! – Rexx 2011-05-23 14:44:19

回答

2

我會親自去選項(1)(創建2個不同的同一類的線程)。

我不覺得有必要創建2個不同類的工作,可以由同一類的2個不同的線程完成。

18
  1. 看看偉大的java.util.concurrent
  2. 有出從單一類

這裏創建不同的線程對象的性能沒有缺陷是一個簡單的例子:

private static class SomeTask implements Runnable 
{ 
    @Override 
    public void run() 
    { 
    doSomething(); 
    } 
} 

public static void main(String[] args) 
{ 
    ExecutorService executor = Executors.newCachedThreadPool(); 
    for (int i = 0; i < 8; i++) executor.execute(new SomeTask()); 
} 
1

有通過擴展Thread或實現Runnable並使用new Thread(runnable)創建線程之間的性能差別不大。無論使用一個或多個類也是無關緊要的。你應該根據所要完成的工作來設計你的班級結構;如果兩個線程在不同的數據上完成相同的工作,那麼對這兩個線程使用相同的類。

訪問共享數據(無論是靜態類變量還是其他)始終是一個大問題。

2

我不認爲這是你做它的方式。如果你將要有很多短命線程,你可能需要一個線程池,參見java.util.concurrent.Executors。通常我創建一個類型爲runnable的匿名類,例如

executor.execute(new Runnable() { 
    //thread code goes here 
}); 
0

使其中的差別最主要的是你如何設計你的對象層次結構: 如果擴展Thread類,不能擴展任何其他類(Java是單繼承)。所以通過實現Runnable,您仍然可以在您的域模型中擴展其他類。