- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试多线程,想要实现一个小程序来同时下载多个文件。我创建了一个扩展 Thread 的 FileDownloader 类。
总的来说,我的想法是创建一个包含所有相关 FileDownload 对象 (allDownloads) 的 ArrayList 和另一个名为 activeDownloads 的 ArrayList,其中我将 Activity 下载的数量限制为 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****");
}
}
}
感谢您的帮助
最佳答案
您的错误可能就在这里:
if (allDownloads.iterator().hasNext()) {
FileDownloader d = allDownloads.iterator().next();
...
}
您应该将 allDownloads.iterator()
的值保留在专用变量中,否则您将在每次调用时创建一个新的迭代器,然后始终获取第一个值,因此这里是同一个线程。
所以代码应该是:
Iterator<FileDownloader> it = allDownloads.iterator();
while (activeDownloads.size() < 4) {
if (it.hasNext()) {
FileDownloader d = it.next();
activeDownloads.add(d);
it.remove();
}
}
关于java - 下载多个文件时线程 IllegalThreadStateException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38772523/
我有一个执行 shell 脚本的 ProcessBuilder,它工作得很好,直到我想从变量向 shell 脚本添加参数。 Exception in thread "main" java.lang.N
这个问题在这里已经有了答案: Xcode - How to fix 'NSUnknownKeyException', reason: … this class is not key value co
我正在尝试将一些自定义 UIView 从 .xib 文件加载到 UIScrollView 中,但我不断收到“线程 1:EXC_BAD_ACCESS”。 因为这是我第一次真正尝试加载自定义 UIView
satya@ubuntu:~/hadoop/bin$ hadoop namenode -format DEPRECATED: Use of this script to execute hdfs co
所以我正在编写一个小程序来计算学生最好成绩的平均值,当我运行它时,我在线程“main”java.util.InputMismatchException中收到此错误异常。 我看到一篇文章说要使用 nex
我在编译项目时遇到错误- Exception in thread "main" java.lang.StackOverflowError at sun.reflect.Reflection.g
我正在使用 Selenium 填写 Web 表单。我将库客户端组合 3.0.0 beta 3 添加到文档中。我的 Firefox 版本应该是最新的。但是,出现错误。如何解决?或者使用 webdrive
我的任务是创建一个java程序,实现关于BMI转换器的GUI,该转换器可以获取高度和体重。目前尚未完成,但我收到以下错误: Exception in thread "main" java.lang.N
您好,我是 Apache mahout 的新手,我在运行“classify-20newsgroups.sh”这个自动从互联网获取数据集的示例时遇到错误。 错误轨迹: hduser@raj-Lenovo
我在 GameViewController.swift 中有以下代码: override func viewDidLoad() { super.viewDidLoad() let sc
我正在做一个毕业项目,我需要在 PHP 中启用 pthreads,因为我需要多线程。我用了a tutorial ,但我收到此错误:Fatal error class 'Thread' not foun
我正在尝试在通过我的 Java 应用程序加载的 DOM html 页面上执行名为“returnAllLinkTexts()”的 Javascript 函数。下面一行由 Swing 按钮执行。 mysc
这个问题已经有答案了: What is a NullPointerException, and how do I fix it? (12 个回答) 已关闭 7 年前。 每当我在我正在处理的一段代码上按
我正在使用 JAXB 将给定的输入 Xml 文件解码为 Java 对象然后将其编码(marshal)回 Xml 字符串。我的 Xml 文件如下所示: 定义.类: @XmlRoo
这是 Native.cpp : // Native.cpp : Defines the exported functions for the DLL application. // #include
我是一名优秀的程序员,十分优秀!