package cn.edu.tsinghua.hpc.tmms.util;
import java.util.Stack;
import java.util.concurrent.ScheduledThreadPoolExecutor;
public class TaskStack {
private final ScheduledThreadPoolExecutor mAsyncLoader;
private final Stack<Runnable> mThingsToLoad;
public TaskStack() {
mAsyncLoader = new ScheduledThreadPoolExecutor(1);
mThingsToLoad = new Stack<Runnable>();
}
private final Runnable mPopStackRunnable = new Runnable() {
public void run() {
Runnable r = null;
synchronized (mThingsToLoad) {
if (!mThingsToLoad.empty()) {
r = mThingsToLoad.pop();
}
}
if (r != null) {
r.run();
}
}
};
public void push(Runnable r) {
synchronized (mThingsToLoad) {
mThingsToLoad.push(r);
}
mAsyncLoader.execute(mPopStackRunnable);
}
public void clear() {
synchronized (mThingsToLoad) {
mThingsToLoad.clear();
}
}
}