刚开始学线程池的定时任务,用到了scheduleAtFixedRate方法,
package test;
public class work implements Runnable {
@Override
public void run() {
int i=0;
while(i<10) {
System.out.println(i++);
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
package test;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.ScheduledThreadPoolExecutor;
import java.util.concurrent.TimeUnit;
public class errpool {
public static void main(String[] args) {
ScheduledExecutorService pool = new ScheduledThreadPoolExecutor(10);
pool.scheduleAtFixedRate(new work(), 0, 5, TimeUnit.SECONDS);
}
}
我查的教程说:
当执行任务的时间大于周期间隔时,会发生什么呢?
(1)schedule方法:下一次执行时间相对于 上一次 实际执行完成的时间点 ,因此执行时间会不断延后
(2)scheduleAtFixedRate方法:下一次执行时间相对于上一次开始的 时间点 ,因此执行时间不会延后,存在并发性
按他说的我的定时设置的5秒,但是程序执行要10秒,应该符合第二条,但是实际的运行结果如下
0
1
2
3
4
5
6
7
8
9
0
1
2
3
4
5
6
7
8
并没有出现并发现象,这是为啥呢,求大神解答