gpt4 book ai didi

java - 为什么我的 TimerTask 会出现此错误?

转载 作者:行者123 更新时间:2023-11-30 03:25:40 25 4
gpt4 key购买 nike

08-17 18:26:44.540: E/AndroidRuntime(2405): FATAL EXCEPTION: Scheduler
08-17 18:26:44.540: E/AndroidRuntime(2405): java.lang.IllegalThreadStateException: Thread already started.
08-17 18:26:44.540: E/AndroidRuntime(2405): at java.lang.Thread.start(Thread.java:1045)
08-17 18:26:44.540: E/AndroidRuntime(2405): at com.example.simpledownloader.scheduler.Scheduler.run(Scheduler.java:21)
08-17 18:26:44.540: E/AndroidRuntime(2405): at java.util.Timer$TimerImpl.run(Timer.java:284)

所以,我有一个 TimerTask,它通过暴力检查所有待处理的下载。
下载都是 Thread 存储在 Vector 中。一旦 TimerTask 看到一个线程准备就绪,它就会对其调用 start()。这是代码:

代码:

package com.example.simpledownloader.scheduler;

import java.util.TimerTask;

import android.util.Log;

import com.example.simpledownloader.sharable.Sharable;
import com.example.simpledownloader.task.Task;

public class Scheduler extends TimerTask {
//------------------------------------------------------------------------------
@Override
public void run() {
if(Sharable.getShouldLook()){ // Should we look for pending tasks ?
for(Task each: Sharable.downloads){ // Yes, then loop
if(each.isAlive()==false){ // Thread is not running ?
Log.v("SCHEDULER", "NOT RUNNING");
if(each.getReadiness() == true){ // Is it ready ?
each.start(); // Start !
break; // stop looping
}
}
}
}
}
//------------------------------------------------------------------------------
}

为什么我总是收到该错误?
Timer 设置如下:

Sharable.schedulerTimer.scheduleAtFixedRate(Sharable.schedulerTask, 1000, 1000); // start scheduler

最佳答案

如果 isAlive() 返回 false,您将在启动线程之前进行检查。有两种方法不足以阻止您获得 IllegalThreadStateException:

  1. 在调用 isAlive() 和调用 start() 之间,其他某个线程正在启​​动下载线程,或者

    <
  2. 下载线程正在终止,但尚未从您的 Sharable.downloads 集合中删除。

我怀疑后者的可能性更大,所以这就是我开始寻找的地方。或者,如果您想在线程完成后将其保留在下载集合中,您可能想尝试使用 each.getState() == Thread.State.NEW 而不是 each。 isAlive() == false.

关于java - 为什么我的 TimerTask 会出现此错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18292116/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com