2012-05-01 90 views
0

我必須讀取幾個非常大的txt文件,並且必須根據用戶輸入使用多個線程或單個線程來執行此操作。在java中讀取大文本文件時的線程處理?

說我有一個獲取用戶輸入的主要方法,並且用戶請求單個線程並且想要爲該線程處理20個txt文件。我怎麼做到這一點?請注意,下面的代碼不是我的代碼或其設置,而只是「想法」的含義。

例子:

int numFiles = 20; 
int threads = 1; 

String[] list = new String[20]; 
for(int i = 1; i < 21; i++){ 
    list[i] = "hello" + i + ".txt";//so the list is a hello1.txt, hello2.txt, ..., hello20.txt 
} 

public void run(){ 
//processes txt file 
} 

因此,在總結,我將如何做到這一點有一個單獨的線程?有20個線程?

+0

你能用你正在使用的語言(Java我認爲)來標記你的問題嗎? – assylias

+0

謝謝你指出。 – user1261445

回答

3

聽起來您需要一個可配置的線程池,並且每個文件讀取操作都是要提交到該池中的作業。

當用戶指定要使用多少個線程時,您應該正確配置該池,提交一組文件讀作業,並讓池將執行結果分揀出來。

在Java世界中,您將使用Executors.newFixedThreadPool工廠方法,並將每個作業提交爲Callable。關於Java線程池的Here's an article from IBM

+0

你能提供一個例子嗎? – user1261445

+0

該項目指定我們必須使用單個線程或等於文本文件數量的線程數來完成此操作,因此需要使用一個線程處理20個文件的情況就是這種情況。 – user1261445

+0

實際上,如果嘗試使用多個線程來讀取文件的不同部分,則很可能會使應用程序變慢。標準磁盤硬件(和OS)針對順序讀取文件進行了優化,而不是並行讀取文件。認爲「磁頭移動」... –