黑马程序员技术交流社区
标题:
线程的调度问题
[打印本页]
作者:
唐长智
时间:
2013-3-4 23:55
标题:
线程的调度问题
这两个方法字面意思能看懂,但是具体方法是怎么执行的呢?不知道大家能不能写个代码能直观的看出来的?
import java.util.concurrent.Executors;import java.util.concurrent.TimeUnit;
public class Schedule {
public static void main(String[] args){
Executors.newScheduledThreadPool(2).scheduleAtFixedRate(
new Runnable(){
public void run(){System.out.println("go");
}},
1,
1,
TimeUnit.SECONDS);
//用固定频率调度方法调度
Executors.newScheduledThreadPool(2).scheduleWithFixedDelay(
new Runnable(){
public void run(){ System.out.println("oly,oly,oly");
}},
2, 1,
TimeUnit.SECONDS);
//用固定的延时来调度
}
}
复制代码
作者:
莫嘉伟
时间:
2013-3-6 10:58
本帖最后由 莫嘉伟 于 2013-3-6 11:03 编辑
楼主看这代码好像也能看出来作用啊,第一个很好懂啊,就是按频率运行线run()方法,每隔一秒楼主会看到一个go ,第二个是按延迟,不过其实从运行结果来看上面两段代码不同就在于上来按频率调度的就先运行了一次,然后按延迟执行的才开始,所以开始会有两个GO一个OLY,运行结果如下:
go
go
oly,oly,oly
go
oly,oly,oly
作者:
王亚东
时间:
2013-3-7 15:15
通过测试,固定频率是按照任务开始时间算的,比如:02秒开始,频率是3秒,如果任务在3秒内完成,
则下次任务开始时间是05秒,如果超过3秒,下次任务推迟执行。
而固定延时是按照任务结束时间算的,比如:02秒开始,延时3秒,不论任务执行时间多少,下次任务都是
在上次任务完成后3秒才开始执行。
import java.util.Date;
import java.util.concurrent.Executors;
import java.util.concurrent.TimeUnit;
public class Demo02 {
static int rateIndex;
static int delayIndex;
public static void main(String[] args) {
//rate();
delay();
}
// 用固定频率调度方法调度:
public static void rate(){
Executors.newScheduledThreadPool(2).scheduleAtFixedRate(new Runnable() {
public void run() {
rateIndex++;
Date d = new Date();
System.out.println(d+"rate 第"+rateIndex+"次---开始");
try {
Thread.sleep(4000); //休眠4秒,模拟任务执行时间
} catch (InterruptedException e) {
e.printStackTrace();
}
Date d2 = new Date();
System.out.println(d2+"rate 第"+rateIndex+"次---结束");
}
}, 1, 3, TimeUnit.SECONDS);
}
// 用固定的延时来调度
public static void delay(){
Executors.newScheduledThreadPool(2).scheduleWithFixedDelay(
new Runnable() {
public void run() {
delayIndex++;
Date d = new Date();
System.out.println(d+"delay 第"+delayIndex+"次---开始");
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
e.printStackTrace();
}
Date d2 = new Date();
System.out.println(d2+"delay 第"+delayIndex+"次---结束");
}
}, 1, 3, TimeUnit.SECONDS);
}
}
复制代码
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2