scheduleAtFixedRate 与 scheduleWithFixedDelay 区别
2015-10-14 19:36
405 查看
scheduleAtFixedRate 与 scheduleWithFixedDelay 区别
关于上述话题,仅以代码说明
package day1013_Timer;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;
public class ScheduledExecutorServiceText {
public static void main(String[] args) {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd hh:MM:ss");
//构建线程池对象
ScheduledExecutorService executorService = Executors.newScheduledThreadPool(3);
//构建任务对象
Runnable task0 = new Runnable() {
public void run() {
String name = Thread.currentThread().getName();
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println(name+"备份"+sdf.format(new Date()));
}
};
Runnable task1 = new Runnable() {
public void run() {
String name = Thread.currentThread().getName();
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println(name+"鲜明"+sdf.format(new Date()));
}
};
//任务中休眠2秒,打印信息中显示的结果是每间隔2秒打印一次(另外,如果程序的执行时间大于间隔时间的话就会按照程序的执行时间当作间隔,如果程序的执行时间小于间隔时间的话就会按照间隔时间来执行)
//由此可见这个方法不会管任务是否完成,只要间隔的时间到了,就会执行下一次
executorService.scheduleAtFixedRate(task1, 1, 2,TimeUnit.SECONDS);
//任务中也是休眠2秒,可是它的打印信息中显示的结果是每间隔3秒打印一次
//而这个方法hi等到任务执行完成之后才会执行间隔,执行下一次
executorService.scheduleWithFixedDelay(task0, 1, 2, TimeUnit.SECONDS);
}
}
output
/*
pool-1-thread-1鲜明2015-10-14 07:10:41
pool-1-thread-2备份2015-10-14 07:10:41
pool-1-thread-1鲜明2015-10-14 07:10:43
pool-1-thread-1鲜明2015-10-14 07:10:45
pool-1-thread-2备份2015-10-14 07:10:45
pool-1-thread-3鲜明2015-10-14 07:10:47
pool-1-thread-1鲜明2015-10-14 07:10:49
pool-1-thread-3备份2015-10-14 07:10:49
pool-1-thread-1鲜明2015-10-14 07:10:51
*/
关于上述话题,仅以代码说明
package day1013_Timer;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;
public class ScheduledExecutorServiceText {
public static void main(String[] args) {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd hh:MM:ss");
//构建线程池对象
ScheduledExecutorService executorService = Executors.newScheduledThreadPool(3);
//构建任务对象
Runnable task0 = new Runnable() {
public void run() {
String name = Thread.currentThread().getName();
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println(name+"备份"+sdf.format(new Date()));
}
};
Runnable task1 = new Runnable() {
public void run() {
String name = Thread.currentThread().getName();
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println(name+"鲜明"+sdf.format(new Date()));
}
};
//任务中休眠2秒,打印信息中显示的结果是每间隔2秒打印一次(另外,如果程序的执行时间大于间隔时间的话就会按照程序的执行时间当作间隔,如果程序的执行时间小于间隔时间的话就会按照间隔时间来执行)
//由此可见这个方法不会管任务是否完成,只要间隔的时间到了,就会执行下一次
executorService.scheduleAtFixedRate(task1, 1, 2,TimeUnit.SECONDS);
//任务中也是休眠2秒,可是它的打印信息中显示的结果是每间隔3秒打印一次
//而这个方法hi等到任务执行完成之后才会执行间隔,执行下一次
executorService.scheduleWithFixedDelay(task0, 1, 2, TimeUnit.SECONDS);
}
}
output
/*
pool-1-thread-1鲜明2015-10-14 07:10:41
pool-1-thread-2备份2015-10-14 07:10:41
pool-1-thread-1鲜明2015-10-14 07:10:43
pool-1-thread-1鲜明2015-10-14 07:10:45
pool-1-thread-2备份2015-10-14 07:10:45
pool-1-thread-3鲜明2015-10-14 07:10:47
pool-1-thread-1鲜明2015-10-14 07:10:49
pool-1-thread-3备份2015-10-14 07:10:49
pool-1-thread-1鲜明2015-10-14 07:10:51
*/
相关文章推荐
- 10个必需的iOS开发工具和资源
- Android 设计模式模式适配器
- CMMI(软件能力成熟度模型集成)名词术语整理
- SQL查询语句
- 1077. Kuchiguse
- 【hihocoder】1237 : Farthest Point ->微软2016校招在线笔试题
- iOS开发-14款状态栏(StatusBar)开源软件
- 笔试题——char能否存中文汉字
- 信息系统项目管理师:论项目的质量管理
- load和initialize的区分
- 1027. Colors in Mars
- 关于与运算和取余之间的关系
- 面试用友的前后;笔试跟面试
- The first blog:不称职的软件工程本科生到码农研究生的转变。
- NIM 博弈游戏
- 1015. Reversible Primes
- poj 2914 全局最小割(stoer_wagner算法)
- iOS开发者必备:四款后端服务工具
- iOS 字符串的UTF8 编码 以及归档反归档
- 信息系统项目管理师:论项目的沟通管理