您的位置 首页 java

Java基础学习:java定时器

一、定时器: 顾名思义,定时器是定时执行的任务。定时器的应用场景很广,比方说,定时更新排行榜的用户信息、定时刷新首页列表数据到缓存等等 二、Java 中实现定时任务的几种方式 1、原生态 Timer,优点是方便快速,缺点是每一个任务都需要占用一个线程资源,而且任务抛异常出去后,定时任务下次就不会在执行了 2、ScheduledExecutorService,这是 Java5 以后提供的一个类,可以很方便的实现定时调度。ScheduledExecutorServiceservice=Executors.newScheduledThreadPool ( 5 ) ;// 创建调度服务,线程池数量为 5service.scheduleAtFixedRate ( Runnablecommand,longinitialDelay,longperiod,TimeUnitunit ) ;// 开启调度,command 是所要执行的任务,initialDelay 是初始化延时时间,period 是调度周期,unit 是时间单位 3、Spring 提供的定时器,例如,以下例子是每一分钟执行一次的任务 @Scheduled ( cron=”0*/1***?” )publicvoidupdateXxx ( ) {…} 这种方式很方便,而且也是基于线程池的方式,数量可以通过 xml 配置。如果项目中有很多定时任务,那么就需要相对应的调大线程池数量,不然就得排队了。 三、分布式定时器所遇到的问题 分布式定时器:简单理解就是多个定时器同时部署,定时器中的各个任务相互协作 可能遇到的问题(包括但不限于此):1、如何保证多个定时器中同一个任务只有一个在执行 2、如何避免死锁 3、另一个诡异的问题是,明明已经加锁了,但还是被重复执行了 四、解决方案 多个定时器中的同一个任务只有一个在执行。这个时候光靠 Java 本身提供的锁机制是没办法实现的,需要借助第三方的力量,这里使用的是 Redis,因为它高效,性能好、单节点支持 qps 已经超过了 1 万,所以性能是非常高的。其中用到的是 Redis 的 set 命令。 原型是:SETkeyvalue [ EXseconds ] [ PXmilliseconds ] [ NX|XX ] EXsecond:设置键的过期时间为 second 秒。PXmillisecond:设置键的过期时间为 millisecond 毫秒。NX:只在键不存在时,才对键进行设置操作。XX:只在键已经存在时,才对键进行设置操作。 例子:setmylock192.168.1.100EX5NX 上边的例子中设置 key 为 mylock,value 为 192.168.1.100,EX5 表示过期时间为 5 秒钟,NX 表示当 key 不存在的时候再设置。这里为什么要把 value 设置为 IP 呢,原因是可以追踪是谁占有着这把锁。 设置成功时返回 OK,失败则返回 nil,利用这个特性就可以实现分布式锁了。其中设置 5 秒的过期时间可以避免死锁的发生 以上就是小编针对“ Java 基础学习:java 定时器”的内容进行的回答,希望对大家有所帮助,关注动力节点,想了解更多 Java 技术知识或视频资源留言给小编。

文章来源:智云一二三科技

文章标题:Java基础学习:java定时器

文章地址:https://www.zhihuclub.com/176336.shtml

关于作者: 智云科技

热门文章

网站地图