我在開放目錄項目(ODP)中使用URL實現多線程Wget。我收到以下錯誤:太多的開放線程錯誤
java.io.FileNotFoundException: log (Too many open files)
at java.io.FileOutputStream.openAppend(Native Method)
at java.io.FileOutputStream.<init>(FileOutputStream.java:207)
at java.io.FileOutputStream.<init>(FileOutputStream.java:131)
at java.io.FileWriter.<init>(FileWriter.java:78)
at ODP.run(ODP.java:103)
我讀過,這是因爲它立交橋在系統變量指定打開的文件描述符的限制:執行cat/proc/SYS/FS /文件的最大
有沒有辦法限制可以同時啓動的線程數?我認爲它是由可以運行CPU的線程數自動完成的。
謝謝!
編輯:這是主要的方法裏面的主循環:
while (rs.next()) {
// Process entry
String rsc = rs.getString ("resource");
String tpc = rs.getString("topic");
(new ODP(rsc, tpc, rs.getString("description"))).start();
BufferedWriter outLog = new BufferedWriter(new FileWriter("log", true));
outLog.write(count + ": " + rsc + " | " + tpc + "\n");
outLog.close();
++count;
}
在ODP.run()方法創建一個BufferedWritter:
BufferedWriter out = new BufferedWriter(new FileWriter(cat.split("/")[1] + ".webtrec", true));
out.write(webtrec);
out.close();
我把我如何處理ODP.run方法中的filewriter的代碼。如你所見,我將它關閉。每個線程都會打開一個文件描述符,因此線程的數量與特定時刻的文件描述符的數量有關。 – synack
我想如果他產生了10000個線程,每個線程運行上面的代碼,他也會得到太多的文件打開錯誤。 – Alvin
限制你的線程。使用線程池。 – Drona