我在开放目录项目(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