定时任务有哪些应用,定时任务是什么

http://www.itjxue.com  2023-01-05 15:23  来源:未知  点击次数: 

有什么软件可以让电脑定时关机?

《Wise Auto Shutdown 1.7.8定时关机软件》百度网盘资源免费下载:

链接:

?pwd=ntj7 提取码: ntj7

Wise Auto Shutdown 1.7.8定时关机软件具有自动关机,重启,注销,休眠,睡眠的功能。定时任务的类型也很多,可以指定的时间,可以倒计时(从现在开始多长时间后执行任务),可以每天的固定时间,还可以设置当CPU处于空闲就执行任务,非常方便。关机(重启,注销等)前5分钟提醒,避免自动关机时还没有保存当前的工作。

几种主流的分布式定时任务,你知道哪些?

自从JDK1.5之后,提供了 ScheduledExecutorService 代替TimerTask来执行定时任务,提供了不错的可靠性。

Spring Framework 自带定时任务,提供了cron表达式来实现丰富定时任务配置。新手推荐使用 这个网站来匹配你的 cron表达式 。

单点的定时服务在目前微服务的大环境下,应用场景越来越局限,所以尝鲜一下分布式定时任务吧。

相较于之前两种方式,这种基于Redis的实现可以通过多点来增加定时任务,多点消费。但是要做好防范重复消费的准备。

将定时任务存放到ZSet集合中,并且将过期时间存储到ZSet的Score字段中,然后通过一个循环来判断当前时间内是否有需要执行的定时任务,如果有则进行执行。

具体实现代码如下:

适用场景如下:

优势是:

默认情况下Redis是不开启键空间通知的,需要我们通过 config set notify-keyspace-events Ex 的命令手动开启。开启之后定时任务的代码如下:

Spring会监听符合以下格式的Redis消息

基于Redis的定时任务能够适用的场景也比较有限,但实现上相对简单,但对于功能幂等有很大要求。从使用场景上来说,更应该叫做延时任务。

场景举例:

优劣势是:

将定时任务作为单独的服务,遏制了重复消费,独立的服务也有利于扩展和维护。

依赖于MySQL,使用相对简单,可多节点部署,通过竞争数据库锁来保证只有一个节点执行任务。没有图形化管理页面,使用相对麻烦。

依赖于Zookeeper,通过zookeeper的注册与发现,可以动态的添加服务器

依赖于Zookeeper,集群部署,可以动态的添加服务器。可以手动增加定时任务,启动和暂停任务。

国产,依赖于MySQL,基于竞争数据库锁保证只有一个节点执行任务,支持水平扩容。可以手动增加定时任务,启动和暂停任务。

微服务下,推荐使用xxl-job这一类组件服务将定时任务合理有效的管理起来。而单点的定时任务有其局限性,适用于规模较小、对未来扩展要求不高的服务。

相对而言,基于spring task的定时任务最简单快捷,而xxl-job的难度主要体现在集成和调试上。无论是什么样的定时任务,你都需要确保:

中间件可以将服务解耦,但增加了复杂度

Oracle 定时任务job实际应用

Oracle定时任务是在oracle系统中一个非常重要的子系统,运用得当,可以大大提高我们系统运行和维护能力。oracle定时任务的功能,可以在指定的时间点自行执行任务。

那么在实际工作中,什么样的场景会用到定时任务呢?下面是在实际工作中用到的真实业务场景举例

上面是通过脚本创建,当然也可以通过plsql图形化工具来创建,具体创建过程如下

**系统会自动分配一个任务号jobno ** ,根据jobno 可以进行如下定时任务操作

查询结果如下

其中broken = N 表示该job已经生效

我们再来查看目标表中有没有定时插入数据

可以看到,定时一分钟插入了一条数据。

1、根据jobno,执行以下脚本可以停止job

再来查看定时任务是否停用成功

我们发现BROKEN=Y 说明定时任务已经停止成功了

BROKEN = N ,刚才的定时任务又启动了

下面总计了一些定时任务中常用的运行时间

Android 实现定时任务的五种方式

1、普通线程sleep的方式,可用于一般的轮询Polling

? ? ? new Thread(new Runnable() {

? ? ? ? ? ? @Override

? ? ? ? ? ? public void run() {

? ? ? ? ? ? ? ? while (true) {

? ? ? ? ? ? ? ? ? ? //todo

? ? ? ? ? ? ? ? ? ? try {

? ? ? ? ? ? ? ? ? ? ? ? Thread.sleep(iDelay);

? ? ? ? ? ? ? ? ? ? } catch (InterruptedException e) {

? ? ? ? ? ? ? ? ? ? ? ? e.printStackTrace();

? ? ? ? ? ? ? ? ? ? }

? ? ? ? ? ? ? ? }

? ? ? ? ? ? }

? ? ? ? }).start();

优点:非常简单的实现,逻辑清晰明了,也是最常见的写法

缺点:在sleep结束后,并不能保证竞争到cpu资源,这也就导致了下次执行时间必定=iDelay,存在时间精度问题

2、Timer定时器

? ? //Timer + TimerTask结合的方法

? ? private final Timer timer = new Timer();

? ? private TimerTask timerTask = new TimerTask() {

? ? ? ? @Override

? ? ? ? public void run() {

? ? ? ? ? ? //todo

? ? ? ? }

? ? };

启动定时器方法:

timer.schedule(TimerTask task, long delay, long period)

立即执行

timer.schedule(timerTask, 0, 1000); //立刻执行,间隔1秒循环执行

延时执行

timer.schedule(timerTask, 2000, 1000); //等待2秒后再执行,间隔1秒循环执行

关闭定时器方法:timer.cancel();

优点:纯正的定时任务,纯java SDK,单独线程执行,比较安全,而且还可以在运行过程中取消执行

缺点:基于单线程执行,多个任务之间会相互影响,多个任务的执行是串行的,性能较低,而且timer也无法保证时间精确度,是因为手机休眠的时候,无法唤醒cpu,不适合后台任务的定时

3、ScheduledExecutorService

? ? private Runnable runnable2 = new Runnable() {

? ? ? ? @Override

? ? ? ? public void run() {

? ? ? ? ? ? //todo

? ? ? ? }

? ? };

? ? ScheduledExecutorService executor = Executors.newScheduledThreadPool(1);

? ? executor.scheduleAtFixedRate(runnable2, 0, 1, TimeUnit.SECONDS);

关于scheduleAtFixedRate(Runnable command, long initialDelay, long period, TimeUnit unit) 方法说明:

command:需要执行的线程

initialDelay:第一次执行需要延时的时间,如若立即执行,则initialDelay = 0

period:固定频率,周期性执行的时间

unit:时间单位,常用的有MILLISECONDS、SECONDS和MINUTES等,需要注意的是,这个单位会影响initialDelay和period,如果unit = MILLISECONDS,则initialDelay和period传入的是毫秒,如果unit = SECONDS,则initialDelay和period传入的是秒

补充一下: 还有一个方法跟上面的很相似:scheduleWithFixedDelay(Runnable command, long initialDelay, long delay, TimeUnit unit),这个也是带延迟时间的调度,并且也是循环执行,唯一的不同就是固定延迟时间循环执行,上面的是固定频率的循环执行。那这两者的区别?

举例子:

使用scheduleAtFixedRate,任务初始延迟3秒,任务执行3秒,任务执行间隔为5秒:

? ? ? ? ScheduledExecutorService executor = Executors.newScheduledThreadPool(1);

? ? ? ? Log.e(TAG, "schedule just start! time =" +? simpleDateFormat.format(System.currentTimeMillis()));

? ? ? ? executor.scheduleAtFixedRate(new Runnable() {

? ? ? ? ? ? @Override

? ? ? ? ? ? public void run() {

? ? ? ? ? ? ? ? SystemClock.sleep(3000L);

? ? ? ? ? ? ? ? Log.e(TAG, "runnable just do it! time =" +? simpleDateFormat.format(System.currentTimeMillis()));

? ? ? ? ? ? }

? ? ? ? }, 3, 5, TimeUnit.SECONDS);

执行结果截图:

使用scheduleWithFixedDelay,任务初始延迟3秒,任务执行3秒,任务执行延迟为5秒:

? ? ? ? ScheduledExecutorService executor = Executors.newScheduledThreadPool(1);

? ? ? ? Log.e(TAG, "schedule just start! time =" +? simpleDateFormat.format(System.currentTimeMillis()));

? ? ? ? executor.scheduleWithFixedDelay(new Runnable() {

? ? ? ? ? ? @Override

? ? ? ? ? ? public void run() {

? ? ? ? ? ? ? ? SystemClock.sleep(3000L);

? ? ? ? ? ? ? ? Log.e(TAG, "runnable just do it! time =" +? simpleDateFormat.format(System.currentTimeMillis()));

? ? ? ? ? ? }

? ? ? ? }, 3, 5, TimeUnit.SECONDS);

执行结果截图:

从这两者的运行结果就可以看到区别了:scheduleAtFixedRate是相对于任务执行的开始时间,而scheduleWithFixedDelay是相对于任务执行的结束时间。

优点:ScheduledExecutorService是一个线程池,其内部使用的延迟队列,本身就是基于等待/唤醒机制实现的,所以CPU并不会一直繁忙。解决了TimerTimerTask存在的问题,多任务处理时效率高

缺点:取消时需要打断线程池的运行,而且和外界的通信不太好处理

4、使用Handler中的postDelayed方法

? ? private Handler mHandler = new Handler();

? ? private Runnable runnable = new Runnable() {

? ? ? ? @Override

? ? ? ? public void run() {

? ? ? ? ? ? //todo

? ? ? ? ? ? mHandler.postDelayed(this, iDelay);

? ? ? ? }

? ? };

? ? mHandler.post(runnable); //立即执行

? ? mHandler.postDelayed(runnable, iDelay); //延时执行

? ? mHandler.removeCallbacks(runnable); //取消执行

优点:比较简单的android实现,适用UI线程

缺点:没想到,手动捂脸。。。。我估计是使用不当会造成内存泄露吧

5、Service + AlarmManger + BroadcastReceiver

(责任编辑:IT教学网)

更多

推荐通讯数据软件文章