2010-03-19 42 views
2

我遇到了一些線程問題。我明白他們是如何工作的,但由於他們都使用相同的方法,我如何運行不同的線程來完成不同的事情,但同時呢?如何在Java中運行不同的線程?

對我來說,他們似乎總是使用相同的標準方法,使他們做同樣的事情。

所以,假設我有一個大的.txt文件,我想要通過每一行,並做一些事情。在這種情況下,我希望每個線程執行.txt文件的1/10,但我不明白線程是如何相互通信的,以及它們如何組織以便每個線程執行正確的部分?

任何人都可以解釋或幫助我嗎?將非常感謝!

+1

這是一個很大的問題。也許你應該考慮做一些代碼來刺探它,並且在這個問題中也包含這個代碼 – svrist 2010-03-19 12:27:40

+0

你還必須考慮是否有意義的同時訪問多個線程。如果他們爲每一行執行的工作量非常小,則讀取文件的I/O成本相對較大,而多線程無助於此。如果你做更大的事情(例如從該行的URL下載文件),這可能是個好主意。 – Thilo 2010-03-19 12:36:18

回答

6

您可以擴展java.lang.Thread(或更好 - 實現java.lang.Runnable)並將參數傳遞給新對象的構造函數。對於文本文件,例如:

public FileReader implements Runnable { 
    private int startLine; 
    private int endLine; 
    public FileReader(int startLine, int endLine) { 
     // assign the params to the fields 
    } 

    public void run() { 
     // use the params to read the appropriate lines 
    } 
} 

,然後您可以:

new Thread(new FileReader(1, 10)).start(); 
new Thread(new FileReader(11, 20)).start(); 
new Thread(new FileReader(21, 30)).start(); 
+0

Bozho,幫了我很多。非常感謝。 我會稍微做一點實驗,稍後會回來反饋。 如果其他人有任何要注意的地方,請這樣做。再次感謝! – 2010-03-19 12:59:27

+0

@CrisCarter我不認爲你知道這一點,但如果任何答案可以幫助你很多(如這個),和/或實際上回答你原來的問題,你應該接受按下上下箭頭下方的勾號你想接受的答案。這樣你會保持你的名聲,其他人會更傾向於幫助你! – Andy 2012-07-24 18:47:23

-2

據我所知,線程並行運行的獨立塊,總有一個主線程(通常是主線程)它控制並行運行的工作線程。由於主線程處理該任務,因此不需要線程彼此進行通信。

在你的情況下,你可以讓主線程向工作線程發送參數,指出線號 - 線程1爲0到10,線程2爲11到20等。工作線程將這些數字作爲輸入並處理文件因此。

4

現在,您應該看看java.util.Concurrent而不是修改原始線程(雖然它們當然可以在適當的地方使用)。線程是一個相當重要的主題,但是通過使用來自Concurrent包的明確定義的成語,它可以變得更容易理解。

相關問題