簡體   English   中英

為什么在TimerTask中出現此錯誤?

[英]Why do I get this error in my TimerTask?

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM