2012-08-07 67 views
-1

我對每個文件數組的循環都有一個線程。對於每個文件都有一些常見的操作。有很多這樣的文件需要處理並且耗時。我在想如果Java線程可以幫助我實現更高的性能。我是java線程編程的新手。需要任何幫助從每個文件數組的循環中爲每個循環產生一個線程

+0

你做了什麼研究?你有什麼嘗試?你讀過什麼文件? – Gray 2012-08-07 18:19:20

+0

@gray我從我的手機問這個問題。我沒有我試過的代碼。我會盡可能更新問題。我已閱讀由oracle和一些網站提供的教程。 – VamsiKrishna 2012-08-07 18:22:43

回答

2

假設的FileReader類包含的邏輯處理單個文件

public class FileReader implements Runnable { 

String fileName; 

public FileReader(String fileName) { 
    this.fileName = fileName; 
} 

public void run() { 

processFile(fileName); 

} 

private void processFile(String fileName) { 
    // Your logic of processing the file. 
} 

} 

然後添加以下代碼來處理目錄中的文件

你應該總是使用一個線程池,以確保您使用系統資源典雅

private static final int THREAD_COUNT = 10; 
private static final ThreadPoolExecutor pool = new ThreadPoolExecutor(
     THREAD_COUNT, THREAD_COUNT, 10, TimeUnit.SECONDS, 
     new LinkedBlockingQueue<Runnable>()); 

每個文件要處理

FileReader reader = new FileReader(file.getAbsolutePath()); 
    pool.execute(reader); 
+0

這回答我的問題。謝謝。我將執行此操作併發布工作代碼 – VamsiKrishna 2012-08-08 06:16:26

1

這實際上取決於您必須爲每個文件做什麼,以及處理的瓶頸所在。如果你正在處理CPU限制(你必須對從文件讀取的數據進行大量計算),然後創建更多的線程,然後你有CPU內核來運行它們不會幫助你。另一方面,如果您的處理恰好是「將文件數據提交給服務器,等待響應」並且同時提交您的請求不會降低服務器速度,那麼爲每個文件設置一個線程可能會有所幫助。

不知道更多關於什麼處理涉及沒有一個真正的具體建議,可以給。

+0

對文件的操作是文件讀寫操作。它讀取文件編輯文件並將其保存。 – VamsiKrishna 2012-08-07 18:26:03

+0

我會建議做一些測試,找出可以同時運行多少個線程,然後管理所有線程的額外開銷最終會放慢你的速度,然後parall處理速度加快。 @byter建議的ThreadPoolExecutor類將是限制程序使用的線程數的好方法。 – 2012-08-07 19:27:57

+0

@Joethanks您的輸入。雅線程池是我正在尋找.. – VamsiKrishna 2012-08-08 06:17:55