new Timer ( ) . schedule ( new TimerTask ( ) { public void run ( ) { System . out . println ( "Hello World" ) ; } , 2000 ) ;

上面代码虽然实现了 setTimeout 的效果, 但还不够简洁, 于是 稍微修改一下

  1. 首先新建一个接口
public interface Callback {
     * 回调函数专用接口
    void run();
  1. 再新建一个 Timeout 类
import java.util.Timer;
import java.util.TimerTask;
 * Timeout
 * 稍微封装一下
 * @author hengzi
 * @date 2022/7/27
public class Timeout {
    private Timer timer;
    public Timeout() {
    public Timeout(Callback callback, long delay){
        timer = new Timer();
        TimerTask timerTask = new TimerTask() {
            @Override
            public void run() {
                callback.run();
                // 执行完就退出
                timer.cancel();
        timer.schedule(timerTask,delay);
    public void cancel(){
        if(timer!=null){
            timer.cancel();

于是 你就可以完全像js那样 调用了

        new Timeout(()-> System.out.println("Hello World"),  2000);
        new Timeout(()-> {
            // do something
        },  5*60*1000);

二. 接下来实现 setInterval ,新建 Interval.java

import java.util.Timer;
import java.util.TimerTask;
 * Interval
 * @author hengzi
 * @date 2022/7/29
public class Interval {
    private Timer timer;
    public Interval() {
    public Interval(Callback callback, long period) {
        timer = new Timer();
        TimerTask timerTask = new TimerTask() {
            @Override
            public void run() {
                callback.run();
        timer.schedule(timerTask,0,period);
    public void cancel(){
        if(timer!=null){
            timer.cancel();
  		new Interval(()-> {
            // do something
        },  1000);
        // 一秒钟执行一次

OK,现在可以了,但是这个Interval 只能定时执行,其实很多时候,执不执行都是要看情况的,或者有次数限制的,那么我们再进一步写一个SmartInterval来实现这个效果。

三. 进阶 Interval

首先 定义一个接口SmartCallback内容很简单

* SmartCallback * @author hengzi * @date 2022/7/29 public interface SmartCallback { * 回调函数专用接口 * @return 是否继续执行 boolean run();

再写一个 SmartInterval.java

* SmartInterval * @author hengzi * @date 2022/7/29 public class SmartInterval { private Timer timer; private int count; public SmartInterval() { * SmartInterval * @param callback 需要循环执行的函数 * @param period 间隔 多少毫秒执行一次 * @param limit 一共执行多少次 为 0 则不限制 会一直执行 public SmartInterval(SmartCallback callback, long period, int limit) { new SmartInterval( callback, period, limit,()->{}); * SmartInterval * @param callback 需要循环执行的函数 * @param period 间隔 多少毫秒执行一次 * @param limit 一共执行多少次 为 0 则不限制 会一直执行 * @param afterLimit 达到上限后 执行的函数, 也就是最后一次执行之后要干嘛,相当于 关闭前执行的函数 public SmartInterval(SmartCallback callback, long period, int limit,Callback afterLimit){ timer = new Timer(); count = 0; TimerTask timerTask = new TimerTask() { @Override public void run() { boolean run = callback.run(); count++; if(limit !=0 && count>=limit){ afterLimit.run(); timer.cancel(); if(!run){ // 不跑了 就取消 timer.cancel(); timer.schedule(timerTask,0,period); public void cancel(){ if(timer!=null){ timer.cancel();
        new SmartInterval(()->{
        	// do something 
        	//  return true 继续执行 return false 停止执行
            return true;
        },1000,60,()->{
            // 一秒钟执行一次, 一共执行 60 次
            System.out.println("执行了60次");
        });
 		new SmartInterval(()->{
        	System.out.println("一秒钟过去了");
            return true;
        },1000,0);

OK 这下完美了

查看演示 下载源码 setTimeout() 方法用于在指定的毫秒数后调用函数或计算表达式,而setInterval()则是在每隔指定的毫秒数循环调用函数或表达式,直到clearInterval把它清除。也就是说setTimeout()只执行一次,setInterval()可以执行多次。两个函数的参数也相同,第一个参数是要执行的code或句柄,第二个是延迟的毫秒数。 setTimeOut用法 setTimeout函数的用法如下: var timeoutID = window.setTimeout(func, [delay, param1, param2, ...]); var t
setTimeout方法是定时程序,也就是在什么时间以后干什么。干完了就拉倒。 setInterval方法则是表示间隔一定时间反复执行某操作。   如果用setTimeout实现setInerval的功能,就需要在执行的程序中再定时调用自己才行。如果要清除计数器需要 根据使用的方法不同,调用不同的清除方法: 例如: tttt=setTimeout(‘northsnow()’,1000); clearTimeout(tttt); 或者: tttt=setInterval(‘northsnow()’,1000); clearInteval(tttt); 举一个例子: 代码如下: <div id=
语法:setInterval(code,millisec) 语法:setInterval(code,1000) 解释:code:在定时时间到时要执行的JavaScript代码串。 millisec:设定的定时时间,用毫秒数表示。 返回值:定时器的ID值,可用于clearInterval()方法停止指定的定时器。
要使用 `setTimeout` 来模拟 `setInterval` 的功能,你可以在 `setTimeout` 的回调函数中再次调用 `setTimeout`,以实现周期性的触发。下面是一个示例代码: ```javascript function setInterval(callback, delay) { // 定义一个递归函数,实现周期性触发回调函数 function interval() { callback(); setTimeout(interval, delay); // 第一次触发回调函数 setTimeout(interval, delay); 使用时,你可以像使用 `setInterval` 一样来调用 `setInterval` 函数,例如: ```javascript function sayHello() { console.log('Hello!'); // 每隔1秒输出一次 'Hello!' setInterval(sayHello, 1000); 这样,`sayHello` 函数会每隔 1 秒被触发一次,模拟了 `setInterval` 的效果