Mercurial > hg > Members > sugi > javafx
view src/alice/topology/manager/keeparive/PingScheduler.java @ 40:8119d2bc3735 default tip
refactor
author | YU |
---|---|
date | Mon, 09 Jun 2014 19:17:00 +0900 |
parents | 1dc3c76e6b34 |
children |
line wrap: on
line source
package alice.topology.manager.keeparive; import java.util.HashMap; 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 HashMap<String, Integer> map = new HashMap<String, Integer>(); private long INTERVAL = 60 * 1000; public boolean updateFlag = false; private boolean interruptFlag = false; public long time = 0; public int taskNum = 0; public TaskInfo nowTask; private long totalTime = 0; private long postponeTime = 0; public long getTotalTime(){ return totalTime; } public List<TaskInfo> getTaskList(){ return list; } public synchronized void postpone(String name){ long elapsedTime = System.currentTimeMillis() - time; totalTime += elapsedTime; postponeTime = nowTask.getTime() - elapsedTime; if (name.equals(nowTask.getName())){ TaskInfo nextTask = list.get(0); nextTask.setTime(postponeTime + nextTask.getTime()); nowTask.setTime(INTERVAL); addTask(nowTask); } else { int cnt = 0; nowTask.setTime(postponeTime); list.add(cnt, nowTask); for (TaskInfo info : list){ if (name.equals(info.getName())){ if (info != list.getLast()){ TaskInfo nextInfo = list.get(cnt+1); nextInfo.setTime(nextInfo.getTime() + info.getTime()); } list.remove(info); info.setTime(INTERVAL); addTask(info); break; } cnt++; } } interruptFlag = true; notify(); } public synchronized void addTask(TaskInfo newInfo){ if (map.containsKey(newInfo.getName())){ newInfo.setTaskNum(map.get(newInfo.getName())); } else { taskNum +=10; map.put(newInfo.getName(), taskNum); newInfo.setTaskNum(taskNum); } if (list.isEmpty()) { list.add(newInfo); } else { int cnt = 0; for (TaskInfo info : list){ if (info.getTime() < newInfo.getTime()){ newInfo.setTime(newInfo.getTime() - info.getTime()); } else if (info.getTime() == newInfo.getTime()){ newInfo.setTime(newInfo.getTime() - info.getTime()); cnt++; break; } else if (info.getTime() > newInfo.getTime()){ info.setTime(info.getTime() - newInfo.getTime()); break; } cnt++; } list.add(cnt, newInfo); } updateFlag = true; } @Override public synchronized void run() { try { while(true){ if(list.size()== 0) System.exit(0); for (TaskInfo info : list){ System.out.println(info.getName()+" "+info.getTime()); } nowTask = list.poll(); System.out.print("taskNum "+nowTask.getTaskNum()); System.out.println(" taskTime "+nowTask.getTime()); time = System.currentTimeMillis(); if (nowTask.getTime()!=0) this.wait(nowTask.getTime()); if (interruptFlag){ interruptFlag = false; } else { totalTime +=nowTask.getTime(); nowTask.setTime(INTERVAL); addTask(nowTask); } } } catch (InterruptedException e) { } } }