在Reactor3 源码解析十二: ElasticScheduler源码剖析(1)中主要讲解了,向派单组提交一个任务,派单组内部调度处理。使用方式如下:
public static void main(String[] args) throws Exception{
Scheduler s = Schedulers.elastic();
s.schedule(() -> {
System.out.println(Thread.currentThread().getName() + " : " + "runnable 1");
try {
Thread.sleep(10l);
} catch (InterruptedException e) {
e.printStackTrace();
}
});
s.schedule(() -> {
System.out.println(Thread.currentThread().getName() + " : " + "runnable 2");
});
Thread.sleep(10l);
s.schedule(() -> {
System.out.println(Thread.currentThread().getName() + " : " + "runnable 3");
});
s.dispose();
}
执行结果:
elastic-2 : runnable 1
elastic-3 : runnable 2
elastic-2 : runnable 3
我们发现elastic-2被重用了。 但是elastic-1干嘛去了? elastic-1有一个固定的任务就是清除过期的员工,这个员工不会进入闲置池。随着派单组的生而生,随着派单组的死而死,不会处理其他任务。
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
下面我们来看下另一种调度方式,先看case
public static void main(String[] args) throws Exception{
Scheduler s = Schedulers.elastic();
Worker w = s.createWorker();
w.schedule(() -> {
System.out.println(Thread.currentThread().getName() + " : " + "runnable 1");
try {
Thread.sleep(10l);
} catch (InterruptedException e) {
e.printStackTrace();
}
});
w.schedule(() -> {
System.out.println(Thread.currentThread().getName() + " : " + "runnable 2");
});
Thread.sleep(10l);
w.schedule(() -> {
System.out.println(Thread.currentThread().getName() + " : " + "runnable 3");
});
s.dispose();
}