【发布时间】:2012-05-16 09:18:41
【问题描述】:
我正在使用开放目录项目 (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/file-max
有没有办法限制同时启动的线程数?我以为它是根据可以运行 CPU 的线程数自动完成的。
谢谢!
编辑:这是main方法中的主循环:
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();
【问题讨论】:
标签: java multithreading io