我有一個動態保存大量文件的目錄。目前有一項任務會不時列出文件並按順序處理它們(寫入數據庫)。由於文件數量的增加,有必要對這些文件進行並行處理。你能給我一些想法和java代碼示例嗎?併發文件處理
併發文件處理
回答
創建一個類saver extends Thread
並處理那裏的文件操作(在run()
方法中)?
http://download.oracle.com/javase/tutorial/essential/concurrency/
http://download.oracle.com/javase/7/docs/api/java/lang/Thread.html
這不是如果你熟悉Java併發真的很明顯,所以我會採取一看的Java Concurrency Tutorial開始。這是一個開始的好地方。
然後請記住,任何需要被多個線程訪問的對象都應該是不可變的或同步的。
之後,您可以使用ExecutorService
擁有一個線程池,並且有多個線程可以同時運行。
我知道,這是不一樣的過程實質上但假設你知道如何處理這些文件,你可以在下面的問題就來看看關於在不同的上下文中多線程: questions around synchronization in java; when/how/to what extent
Parallel-processing in Java; advice needed i.e. on Runnanble/Callable interfaces
使用一個ExecutorService。創建Executors.newFixedThreadExecutor(n);
你也許可以使文件處理成一個單一的可運行(或可調用)任務,並將它傳遞的,你可以在
ExecutorService service = Executors.newFixedThreadExecutor(10);
for(final File file : directory.listFiles()){
service.submit(new Runnable(){
public void run(){
//do work here on file object
}
});
}
工作文件看一看的java.nio中的監視在役API 。文件。以下是文檔和教程:http://download.oracle.com/javase/tutorial/essential/io/notification.html
此服務允許您在目錄上註冊文件通知更改。對於每一個通知,你可以做任何你想要的處理。可能比實現你自己的事容易得多。
如果我正確理解你的單個任務處理從讀取到數據庫加載。您可以根據性質(以數據庫爲中心,以CPU爲中心或以IO爲中心)將此任務分解爲不同的任務。例如,您可以執行以下不同的任務:
當前任務,從目錄中選取文件並將其傳遞給下一個任務。
IO Centric - 新任務讀取文件並存儲在內存中,然後傳遞給下一個taks。
以數據庫爲中心 - 新任務將數據從內存加載到數據庫,然後清理內存。
以IO爲中心 - 將文件移動到其他地方。
要進一步提高性能,可以使用線程池實現任務2,3,4。這將允許並行處理多個文件。根據任務的複雜性,您可以添加或刪除列表中的任何任務以滿足您的要求。
- 1. 併發處理從文件
- 2. 處理併發讀取/寫入文件
- 3. 郵件併發處理(Python)
- 4. Gulp:限制文件處理併發性;避免同時處理*所有文件*
- 5. 並行處理文件
- 6. Java併發處理
- 7. 併發處理php
- 8. 處理併發性
- 9. 處理併發xmlhttprequests
- 10. 發佈Assembly.LoadFrom文件處理
- 11. 處理併發事件的Java Swing事件處理
- 12. 文件合併批處理文件
- 13. Git - 處理文件合併的合併
- 14. 異步發送郵件並處理
- 15. RestEasy:處理併發請求
- 16. 併發處理在JAVA EE
- 17. java.nio.channels.Selector的併發處理
- 18. 處理併發任務
- 19. 處理LINQ的併發
- 20. PARSE - 處理併發請求?
- 21. 併發處理,使用WEBrick
- 22. Laravel處理併發性
- 23. Objective-C的併發處理
- 24. 併發處理 - Peterson算法
- 25. DbContext,處理併發異常
- 26. 斯卡拉併發處理
- 27. dropwizard如何處理併發?
- 28. Sql transactrion的併發處理
- 29. 發送到上下文菜單,並使用批處理文件合併
- 30. 使用批處理文件並排合併csv文件
+1:雖然這不能回答這個問題,但對於海報來說這是一個很好的建議。 – Karmastan 2011-03-09 15:42:47