scheduleAtFixedRate 与 scheduleWithFixedDelay 的区别

转载 2015年07月09日 22:04:21
package thread;

import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.ScheduledFuture;
import java.util.concurrent.ThreadFactory;
import java.util.concurrent.ThreadPoolExecutor;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.atomic.AtomicLong;

public class Test03 {

	private static final AtomicLong l = new AtomicLong(0) ;

	private static final ScheduledExecutorService scheduler = 
		Executors.newScheduledThreadPool(10);
	

	public static void main(String[] args) {

		/* 
		 * 使用scheduleAtFixedRate , 该方法第三个参数表示在上一个个任务开始执行之后延迟
		 * 多少秒之后再执行, 是从上一个任务开始时开始计算
		 * 但是还是会等上一个任务执行完之后,下一个任务才开始执行,最后的结果,就是感觉延迟失去
		 * 了作用
		 *  */
		ScheduledFuture<?> sf1 = scheduler.scheduleAtFixedRate(new Runnable() {
			public void run() {
				long i =  l.getAndAdd(1) ;
				System.out.println("start " + i);
				try {
					TimeUnit.SECONDS.sleep(5) ;
				} catch (InterruptedException e) {  
					e.printStackTrace();
				}
				System.out.println("end " + i);
			}
		}, 0, 2 , TimeUnit.SECONDS) ;

		/* 
		 * 使用scheduleWithFixedDelay该方法第三个参数表示在上一个个任务结束执行之后延迟
		 * 多少秒之后再执行, 是从上一个任务结束时开始计算
		 *  */
		ScheduledFuture<?> sf2 = scheduler.scheduleWithFixedDelay(new Runnable() {
			public void run() {
				long i =  l.getAndAdd(1) ;
				System.out.println("start " + i);
				try {
					TimeUnit.SECONDS.sleep(3) ;
				} catch (InterruptedException e) {  
					e.printStackTrace();
				}
				System.out.println("end " + i);
			}
		}, 0, 2, TimeUnit.SECONDS) ;



	}

}
<span style="background-color: rgb(255, 255, 255);">//------------</span><span style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);">                                                      </span>
<span style="font-family:Arial, Helvetica, sans-serif;"><span style="background-color: rgb(255, 255, 255);">自己看到这样子的结果也觉得比较奇怪,这个scheduleAtFixedRate()方法按照理解应该是直接每个2秒中执行一次。</span></span><pre name="code" class="java" style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);"><span style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);"><span style="color: rgb(51, 51, 51); font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 24px; background-color: rgb(245, 245, 245);"> </span><span style="box-sizing: content-box; font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 24px; color: rgb(255, 0, 0); background-color: rgb(245, 245, 245);">If any execution of this task takes longer than its period, then subsequent executions may start late, but will not concurrently execute.</span></span>
<span style="font-family:Helvetica, Tahoma, Arial, sans-serif;color:#ff0000;"><span style="line-height: 24px; background-color: rgb(245, 245, 245);">这个函数的英文文档的一句话已经说明了,这个方法执行的时间可能会超过执行频率的周期,那么后面的任务会延期执行了。</span></span>

<span style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);">
</span>
<span style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);">
</span>
<span style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);">
</span>
<span style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);">
</span>

scheduleAtFixedRate 与 scheduleWithFixedDelay 区别

scheduleAtFixedRate 与 scheduleWithFixedDelay 区别  关于上述话题,仅以代码说明 package day1013_Timer; import ...
  • fengjie_123
  • fengjie_123
  • 2015年10月14日 19:36
  • 484

schedule、scheduleAtFixedRate和scheduleWithFixedDelay的区别

最近使用java中的定时任务时,对于标题中的几个方法有点懵,故而记录一下。 schedule(commod,delay,unit) ,这个方法是说系统启动后,需要等待多久执行,delay是等待时间。...
  • yuzjang
  • yuzjang
  • 2016年09月02日 12:11
  • 1519

scheduleAtFixedRate和scheduleWithFixedDelay区别

Java中的定时任务ScheduledExecutorService Executors.newScheduledThreadPool 1. scheduleAtFixedRate 表示以固定频...
  • happy_cheng
  • happy_cheng
  • 2017年07月30日 11:36
  • 150

ScheduledExecutorService 的 scheduleAtFixedRate 和 scheduleWithFixedDelay 两个方法的区别

我们用Rate代表scheduleAtFixedRate 方法, Delay代表scheduleWithFixedDelay 方法 从字面意思上理解Rate表示固定频率的 每隔多时间执行一次,Del...
  • u010034351
  • u010034351
  • 2014年01月04日 18:32
  • 1514

scheduleAtFixedRate与scheduleWithFixedDelay区别?

scheduleAtFixedRate与scheduleWithFixedDelay区别? scheduleAtFixedRate与scheduleWithFixedDelay区别,代码如下: ...
  • dotedy
  • dotedy
  • 2015年10月18日 22:39
  • 226

关于ScheduledThreadPoolExecutor类定时执行方法

ScheduledThreadPoolExecutor      我们先来学习一下JDK1.5 API中关于这个类的详细介绍:      "可另行安排在给定的延迟后运行命令,或者定期执行命令。...
  • zxh87
  • zxh87
  • 2013年02月18日 17:02
  • 4077

scheduleAtFixedRate与scheduleWithFixedDelay的区别

最简单,最直接的就是来个demo,测试一下就知道了。jdk文档中ScheduledExecutorService该类的描述中有个例子,来了改的。 import static java.util.co...
  • sofuzi
  • sofuzi
  • 2017年11月22日 23:09
  • 13

JAVA定时器ScheduledExecutorService中,scheduleAtFixedRate和scheduleWithFixedDelay的区别

我们通过运行代码来查看两者之间的区别: 1、首先创建一个需要执行5秒的任务: // 执行这个任务需要5秒 Runnable runnable = new Runnable() { publi...
  • qq906627950
  • qq906627950
  • 2016年08月03日 11:23
  • 476

ScheduledExecutorService的scheduleAtFixedRate和scheduleWithFixedDelay方法的区别

ScheduledExecutorService是java.util.concurrent并发包下的一个接口,表示调度服务~,它定义了以下几个方法:   public ScheduledFutur...
  • qq_18875541
  • qq_18875541
  • 2017年04月06日 16:12
  • 283

scheduleWithFixedDelay 和 scheduleAtFixedRate 的区别

首先看 scheduleWithFixedDelay 官方意思是:创建一个给定初始延迟的间隔性的任务,之后的下次执行时间是上一次任务从执行到结束所需要的时间+给定的间隔时间.  举个例子:比如我给定...
  • q646406929
  • q646406929
  • 2014年03月11日 15:52
  • 2525
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:scheduleAtFixedRate 与 scheduleWithFixedDelay 的区别
举报原因:
原因补充:

(最多只允许输入30个字)