标签:
public interface Executor {}
对于Executor 接口不甚理解,在此mark下
/**
* ArrayDeque不是线程安全的,所以,用作堆栈时快于 Stack,在用作队列时快于 LinkedList
*
*/
public class MyExcutor implements Executor{
private final Queue<Runnable> tasks = new ArrayDeque<Runnable>();
private final Executor executor;
private Runnable active;
public MyExcutor(Executor executor){
this.executor = executor;
}
@Override
public synchronized void execute(final Runnable command) {
tasks.offer(new Runnable() {
@Override
public void run() {
try {
command.run();
} finally {
scheduleNext();
}
}
});
if(active == null){
scheduleNext();
}
}
protected synchronized void scheduleNext() {
if((active = tasks.poll()) != null){
executor.execute(active);
}
}
public void display(){
if(tasks.isEmpty()){
System.out.println("this is null");
}
for(Runnable r : tasks){
System.out.println(r.toString());
}
}
public static void main(String[] args) {
Runnable r1 = new Runnable() {
@Override
public void run() {
int i = 0;
System.out.println(" i = " + (++i));
}
};
Runnable r2 = new Runnable() {
@Override
public void run() {
int a = 3;
System.out.println(" a = " + (++a));
}
};
Runnable r3 = new Runnable() {
@Override
public void run() {
int b = 7;
System.out.println(" b = " + (++b));
}
};
MyExcutor m = new MyExcutor(new Executor() {
@Override
public void execute(Runnable command) {
command.run();
}
});
m.execute(r1);
m.execute(r2);
m.execute(r3);
m.display();
}
}标签:
原文地址:http://blog.csdn.net/kkgbn/article/details/45155589