我爲我的系統創建了一個Timer(java.util)管理器。我想每1秒執行一次。我已經試過這樣:運行時發生定時器每1秒重複
public class GlobalManager extends Timer {
public static GlobalManager manager;
public static ConcurrentLinkedDeque<Manageable> datas = new ConcurrentLinkedDeque<>();
public GlobalManager() {
Thread.currentThread().setName("GlobalManager");
this.scheduleAtFixedRate(new TaskExecutor(), 0, 1000);
}
/* Manage the data in the waiting queue.. */
public static class TaskExecutor extends TimerTask {
@Override
public void run() {
System.out.println(datas.size());
for(Manageable data : datas) {
if((System.currentTimeMillis() - data.startTime) >= data.delay) {
data.run();
if(data.removeAfterRun)
datas.remove(data);
}
}
}
}
}
的問題。它每1秒打印出一行數據的大小。 執行data.run()時,它不會每隔1秒繼續打印一次,而是等待下一次打印的相當長的時間。
爲什麼?
需要多少時間才能遍歷'datas'中的所有內容並運行需要的內容?我不相信計劃的任務將在當前計劃完成之前運行,因此如果處理數據所需時間超過1秒,則您的下一個任務將不會按時執行。 – azurefrog 2014-12-10 22:09:33
你的跑步方法有多久和艱難?把它放在一個線程中,但如果它們不能在同一時間運行,那麼你的運氣不好使 – 2014-12-10 22:09:43
你是直接執行run()方法嗎? (你不應該) – 2014-12-10 22:09:58