我们大家都对定时器不陌生,无论是现实中还是项目中,都离不开定时。在现实中,它叫闹钟,在项目上,它叫定时器,即定时触发某件事情。它能帮助我们在某一个既定的时间节点上,来提醒我们做一些事情,那么作为一个项目开发人员,你都会哪些语言来写定时器呢?
@TOC
1、Java第三方工具
利用Java实现定时器,现在项目中一般使用第三方比如 schedule 或者 xxl-job 等来处理,这里就先介绍使用第三方工具的写法。
@Component
@EnableScheduling
public class Test {
@Scheduled(cron = "*/3 * * * * ?")
public void test() {
int count = 0;
System.out.printf(count + ": " + new Date());
count++;
}
}
2、Java自带类
其实我们叶可以使用Java 的 SDK 自带的 Timer 类,来实现定时器功能:
public class Test {
public static void main(String[] args) {
// 定义一个任务
TimerTask stepTimerTask = new TimerTask() {
@Override
public void run() {
System.out.println("运行定时Step任务:" + new Date());
System.out.println("运行Step完毕");
}
};
// 计时器
Timer timer = new Timer();
// 添加执行任务(延迟1s执行,每三秒执行一次)
timer.schedule(stepTimerTask, 1000, 3000);
}
}
3、JavaScript实现定时器
我们也可以使用JavaScript来实现延时定时器
var t2 = window.setInterval(function() {
console.log(‘每隔3秒钟执行一次’)
},1000)
//清除定时器
window.clearInterval(t2)
4、C语言实现定时器
我们也可以使用C语言来实现一个简单的定时器。
void timer(long time){
clock_t start;
long count = 1;
start = clock();
while(1)
{
if((clock() - start) != (time*CLOCKS_PER_SEC))
{
//时间没有到,啥也不做,空循环
}else {
//时间到了退出循环
// printf("%s","hello");
break;
}
}
}
int main( void )
{
for(int i=0;i<10;i++){
timer(1);
printf("%d\n",i);
}
getch();
}
5、Mysql实现定时器
我们在使用Mysql的时候,有时也会使用MySql自带的定时器,来定时执行sql语句:
例如:
-- 每天0点执行
create event if not EXISTS my_monitor
on schedule every 1 DAY STARTS date(CURRENT_DATE+1)
on completion preserve do call insert_monitor();
当然还需要做一些前期的准备工作,比如开启Mysql的定时策略,创建存储函数等等,这里就不介绍了。
6、Shell 实现定时器
有时候,我们也会在Linux上来实现定时脚本,来定时执行一些任务:
首先我们需要一个执行的内容脚本,例如:test.sh:
echo "测试" >> /test
echo "执行时间为`date` " >> /test
然后使用 crontab -e
命令进入定时编辑
*/1 * * * * sh /test/test.sh
7、Python实现定时器
Python和Java实现定时器一样,有多种方式,这里就只介绍Python原生实现定时器:
def task():
now = datetime.now()
ts = now.strftime("%Y-%m-%d %H:%M:%S")
print(ts)
def fun():
while True:
task()
time.sleep(3)
fun()