A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 唐长智 中级黑马   /  2013-3-4 23:55  /  1607 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

这两个方法字面意思能看懂,但是具体方法是怎么执行的呢?不知道大家能不能写个代码能直观的看出来的?
  1. import java.util.concurrent.Executors;import java.util.concurrent.TimeUnit;


  2. public class Schedule {
  3.         public static void main(String[] args){
  4.                
  5.                 Executors.newScheduledThreadPool(2).scheduleAtFixedRate(
  6.                                 new Runnable(){
  7.                                         public void run(){System.out.println("go");
  8.                                         }},
  9.                                 1,
  10.                                 1,
  11.                                 TimeUnit.SECONDS);
  12.                 //用固定频率调度方法调度
  13.                 Executors.newScheduledThreadPool(2).scheduleWithFixedDelay(
  14.                                 new Runnable(){
  15.                                         public void run(){ System.out.println("oly,oly,oly");
  16.                                         }},
  17.                                 2, 1,
  18.                                 TimeUnit.SECONDS);
  19.                 //用固定的延时来调度
  20.         }
  21. }


复制代码

评分

参与人数 1技术分 +1 收起 理由
高境 + 1 赞一个!

查看全部评分

2 个回复

倒序浏览
本帖最后由 莫嘉伟 于 2013-3-6 11:03 编辑

楼主看这代码好像也能看出来作用啊,第一个很好懂啊,就是按频率运行线run()方法,每隔一秒楼主会看到一个go ,第二个是按延迟,不过其实从运行结果来看上面两段代码不同就在于上来按频率调度的就先运行了一次,然后按延迟执行的才开始,所以开始会有两个GO一个OLY,运行结果如下:
go
go
oly,oly,oly
go
oly,oly,oly
回复 使用道具 举报
     通过测试,固定频率是按照任务开始时间算的,比如:02秒开始,频率是3秒,如果任务在3秒内完成,
则下次任务开始时间是05秒,如果超过3秒,下次任务推迟执行。
    而固定延时是按照任务结束时间算的,比如:02秒开始,延时3秒,不论任务执行时间多少,下次任务都是
在上次任务完成后3秒才开始执行。
  1. import java.util.Date;
  2. import java.util.concurrent.Executors;
  3. import java.util.concurrent.TimeUnit;

  4. public class Demo02 {
  5.         static int rateIndex;
  6.         static int delayIndex;
  7.         public static void main(String[] args) {
  8.                 //rate();
  9.                 delay();
  10.         }
  11.         // 用固定频率调度方法调度:
  12.         public static void rate(){               
  13.                 Executors.newScheduledThreadPool(2).scheduleAtFixedRate(new Runnable() {
  14.                         public void run() {
  15.                                 rateIndex++;
  16.                                 Date d = new Date();
  17.                                 System.out.println(d+"rate 第"+rateIndex+"次---开始");
  18.                                 try {
  19.                                         Thread.sleep(4000);        //休眠4秒,模拟任务执行时间
  20.                                 } catch (InterruptedException e) {
  21.                                         e.printStackTrace();
  22.                                 }
  23.                                 Date d2 = new Date();
  24.                                 System.out.println(d2+"rate 第"+rateIndex+"次---结束");
  25.                         }
  26.                 }, 1, 3, TimeUnit.SECONDS);

  27.         }
  28.         // 用固定的延时来调度
  29.         public static void delay(){               
  30.                 Executors.newScheduledThreadPool(2).scheduleWithFixedDelay(
  31.                                 new Runnable() {
  32.                                         public void run() {
  33.                                                 delayIndex++;
  34.                                                 Date d = new Date();
  35.                                                 System.out.println(d+"delay 第"+delayIndex+"次---开始");
  36.                                                 try {
  37.                                                         Thread.sleep(2000);
  38.                                                 } catch (InterruptedException e) {
  39.                                                         e.printStackTrace();
  40.                                                 }
  41.                                                 Date d2 = new Date();
  42.                                                 System.out.println(d2+"delay 第"+delayIndex+"次---结束");
  43.                                         }
  44.                                 }, 1, 3, TimeUnit.SECONDS);
  45.         }
  46. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
高境 + 1 赞一个!

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马