ScheduledThreadPoolExecutor 有2个方法:
scheduleAtFixedRate 每隔period或程序执行时长执行一次。
scheduleWithFixedDelay等程序执行完成后在等period时间执行一次,也就是每 程序时间+period执行一次。
import java.util.Calendar;
import java.util.concurrent.ScheduledThreadPoolExecutor;
import java.util.concurrent.TimeUnit;
public class JUC_009_ScheduledThreadPool {
public static void main(String[] args) throws InterruptedException {
ScheduledThreadPoolExecutor schedulePool = new ScheduledThreadPoolExecutor(2);
schedulePool.scheduleAtFixedRate(() -> {
System.out.println("FixedRate -- print every 1 sec ,"+ Calendar.getInstance().get(Calendar.SECOND));
try {
Thread.sleep(3000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}, 0, 3, TimeUnit.SECONDS);
schedulePool.scheduleWithFixedDelay(() -> {
System.out.println("FixedDelay -- print every 1 sec ,"+ Calendar.getInstance().get(Calendar.SECOND));
try {
Thread.sleep(3000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}, 0, 3, TimeUnit.SECONDS);
Thread.sleep(50000);
schedulePool.shutdown();
}
}
执行结果:
FixedRate -- print every 1 sec9
FixedDelay -- print every 1 sec9
FixedRate -- print every 1 sec12
FixedRate -- print every 1 sec15
FixedDelay -- print every 1 sec15
FixedRate -- print every 1 sec18
FixedDelay -- print every 1 sec21
FixedRate -- print every 1 sec21
FixedRate -- print every 1 sec24
FixedDelay -- print every 1 sec27
FixedRate -- print every 1 sec27
FixedRate -- print every 1 sec30
FixedDelay -- print every 1 sec33
FixedRate -- print every 1 sec33
FixedRate -- print every 1 sec36
FixedDelay -- print every 1 sec39
FixedRate -- print every 1 sec39
FixedRate -- print every 1 sec42
FixedDelay -- print every 1 sec45
FixedRate -- print every 1 sec45
FixedRate -- print every 1 sec48
FixedRate -- print every 1 sec51
FixedDelay -- print every 1 sec51
FixedRate -- print every 1 sec54
FixedDelay -- print every 1 sec57
FixedRate -- print every 1 sec57