我想我的手在多线程,并希望实现一个小程序,以同时下载多个文件。 我创建了一个扩展Thread的FileDownloader类。java - 线程IllegalThreadStateException当下载多个文件
从主,我的想法是创建一个有问题的所有FileDownload对象的ArrayList(allDownloads),并呼吁activeDownloads另一个ArrayList的,我在那里限制对活动的下载的大写金额为4
程序下载几个文件,然后抛出这个异常。我明白,它试图再次启动一个线程时抛出。但在下面的程序中,我打断了一个线程,并在每次文件下载完成时启动另一个线程,所以我不明白,我怎么可能启动同一线程?
while (allDownloads.size() > 0) {
while (activeDownloads.size() < 4) {
if (allDownloads.iterator().hasNext()) {
FileDownloader d = allDownloads.iterator().next();
activeDownloads.add(d);
allDownloads.remove(d);
}
}
for (int i = 0; i < activeDownloads.size(); i++) {
FileDownloader t = activeDownloads.get(i);
try {
if (!t.isRunning())
t.start();
else if (t.isFinished()) {
t.interrupt();
activeDownloads.remove(t);
}
} catch (IllegalThreadStateException e) {
System.out.println("****Thread cannot be restarted****");
}
}
}
感谢所有帮助
你可以把异常消息请catch子句中添加e.printStackTrace(),所以我们可以清楚地看到发生了什么 –
是的:把一个的println到您的catch块甚至不能打印e的消息,这比空的catch块好不了多少。所以,一些失败,但为什么要说什么...... – GhostCat
什么是't.isRunning()'方法?我不认为它是'Thread' api的一部分。 – Codebender