new
Timer
(
)
.
schedule
(
new
TimerTask
(
)
{
public
void
run
(
)
{
System
.
out
.
println
(
"Hello World"
)
;
}
,
2000
)
;
上面代码虽然实现了 setTimeout 的效果, 但还不够简洁, 于是 稍微修改一下
-
首先新建一个接口
public interface Callback {
* 回调函数专用接口
void run();
- 再新建一个 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(()-> {
}, 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(()-> {
}, 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(()->{
return true;
},1000,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` 的效果。