Mercurial > hg > Database > Alice
view src/alice/topology/manager/keeparive/PingScheduler.java @ 299:48de3510fb00
Scheduler has bug
author | sugi |
---|---|
date | Mon, 04 Nov 2013 13:09:14 +0900 |
parents | |
children |
line wrap: on
line source
package alice.topology.manager.keeparive; import java.util.ArrayList; import java.util.LinkedList; import java.util.List; import alice.codesegment.CodeSegment; public class PingScheduler extends CodeSegment{ private LinkedList<TaskInfo> list = new LinkedList<TaskInfo>(); private ArrayList<TaskInfo> regist = new ArrayList<TaskInfo>(); public boolean updateFlag = false; public long time = 0; public int taskNum = 0; public TaskInfo nowTask; public List<TaskInfo> nameList(){ return regist; } public List<TaskInfo> getTaskList(){ return list; } public synchronized void wake(){ long t = System.currentTimeMillis(); long addTime = nowTask.getTime() - (t - time); TaskInfo ti = list.get(0); ti.setTime(ti.getTime() + addTime); this.notify(); } public synchronized void addTask(TaskInfo newInfo){ boolean newTaskFlag = true; for (TaskInfo t : regist){ if(newInfo.getName().equals(t.getName())){ newInfo.setTaskNum(t.getTaskNum()); newTaskFlag = false; break; } } if (newTaskFlag){ taskNum +=10; newInfo.setTaskNum(taskNum); } boolean addFlag = true; for (int i = 0;i< list.size(); i++){ TaskInfo info = list.get(i); Long t = info.getTime(); if (newInfo.getTime() > t ){ newInfo.setTime(newInfo.getTime() -t); } else { list.add(i, newInfo); if (i != list.size() -1 ){ TaskInfo nextInfo = list.get(i+1); newInfo.setTime(nextInfo.getTime() - newInfo.getTime()); } addFlag = false; break; } } if (addFlag) list.add(newInfo); this.updateFlag = true; } @Override public synchronized void run() { try { while(true){ if(list.size()== 0)System.exit(0); nowTask = list.poll(); time = System.currentTimeMillis(); this.wait(nowTask.getTime()); } } catch (InterruptedException e) { } } }