当前位置: 首页 > news >正文

网站建设知名公司the7 做的网站

网站建设知名公司,the7 做的网站,wordpress metro手机主题,天气预报最新天气预报1、java自带的Timer Timer是java中自带的类。 优点:使用简单,缺点是当添加并执行多个任务时,前面任务的执行用时和异常将影响到后面任务。 Timer timer new Timer();timer.schedule(new TimerTask() {int i 0;Overridepublic void run() …

1、java自带的Timer

Timer是java中自带的类。
优点:使用简单,缺点是当添加并执行多个任务时,前面任务的执行用时和异常将影响到后面任务。

Timer timer = new Timer();timer.schedule(new TimerTask() {int i = 0;@Overridepublic void run() {System.out.println("循环执行的代码块"+ i++);}},启动后多长时间按第一次开始执行,间隔执行时间);

讲解:源码讲解

2、ScheduledThreadPool-定时任务线程池

ScheduledExecutorService 也是Java自带的类,它可以实现Timer具备的所有功能,并解决了 Timer类存在的问题。
优点:该类是JDK1.5自带的类,使用简单,缺点是该方案仅适用于单机环境。

ScheduledExecutorService scheduledThreadPool = Executors.newScheduledThreadPool(该线程池里的线程数);scheduledThreadPool.scheduleAtFixedRate(new Runnable() { public void run() {System.out.println("循环代码块");}},初始延迟,迟期, 时间单位);
参数:1、任务主体(循环代码块) 
2、首次执行的延时时间
3、任务执行间隔 
4、间隔时间单位

讲解:源码讲解

3、Spring Task

Spring系列框架中Spring Framework自带的定时任务,可以实现某些特定需求,比如每周一执行某任务。
1、开启定时任务在SpringBoot的启动类上声明 @EnableScheduling

@SpringBootApplication
@EnableScheduling //开启定时任务
public class SystemApplication {  // --  -- 
}

2、添加定时任务;只需使用@Scheduled注解标注即可,如果有多个定时任务,可以创建多个@Scheduled标注的方法。Spring Boot 启动后会自动加载并执行定时任务,无需手动操作。

import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
@Component  // 把此类托管给 Spring
public class TaskUtils {    // 添加定时任务    @Scheduled(cron = "30 00 10 0 0 5") // cron表达式:每周一 10:00:30 执行    public void doTask(){        System.out.println("我是定时任务~");    }
}

4、分布式定时任务

分布式环境可以使用 Redis 来实现定时任务。
使用 Redis 实现延迟任务的方法大体可分为两类:通过 ZSet 的方式和键空间通知的方式。

ZSet 实现方式

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

import redis.clients.jedis.Jedis;
import utils.JedisUtils;
import java.time.Instant;
import java.util.Set;
public class DelayQueueExample {        private static final String _KEY = "DelayQueueExample";        public static void main(String[] args) throws InterruptedException {        Jedis jedis = JedisUtils.getJedis();        // 30s 后执行        long delayTime = Instant.now().plusSeconds(30).getEpochSecond();       jedis.zadd(_KEY, delayTime, "order_1");        // 继续添加测试数据        jedis.zadd(_KEY, Instant.now().plusSeconds(2).getEpochSecond(), "order_2");       jedis.zadd(_KEY, Instant.now().plusSeconds(2).getEpochSecond(), "order_3");        jedis.zadd(_KEY, Instant.now().plusSeconds(7).getEpochSecond(), "order_4");        jedis.zadd(_KEY, Instant.now().plusSeconds(10).getEpochSecond(), "order_5");        // 开启定时任务队列        doDelayQueue(jedis);    }    /**     * 定时任务队列消费     * @param jedis Redis 客户端     */    public static void doDelayQueue(Jedis jedis) throws InterruptedException {        while (true) {            // 当前时间            Instant nowInstant = Instant.now();            long lastSecond = nowInstant.plusSeconds(-1).getEpochSecond(); // 上一秒时间            long nowSecond = nowInstant.getEpochSecond();            // 查询当前时间的所有任务            Set data = jedis.zrangeByScore(_KEY, lastSecond, nowSecond);            for (String item : data) {                // 消费任务                System.out.println("消费:" + item);            }            // 删除已经执行的任务            jedis.zremrangeByScore(_KEY, lastSecond, nowSecond);            Thread.sleep(1000); // 每秒查询一次        }    }
}

键空间通知

可以通过 Redis 的键空间通知来实现定时任务,它的实现思路是给所有的定时任务设置一个过期时间,等到了过期之后,我们通过订阅过期消息就能感知到定时任务需要被执行了,此时我们执行定时任务即可。
默认情况下 Redis 是不开启键空间通知的,需要我们通过 config set notify-keyspace-events Ex 的命令手动开启。

import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPubSub;
import utils.JedisUtils;
public class TaskExample {    public static final String _TOPIC = "__keyevent@0__:expired"; // 订阅频道名称   public static void main(String[] args) {       Jedis jedis = JedisUtils.getJedis();       // 执行定时任务        doTask(jedis);    }   /**     * 订阅过期消息,执行定时任务     * @param jedis Redis 客户端     */    public static void doTask(Jedis jedis) {        // 订阅过期消息        jedis.psubscribe(new JedisPubSub() {            @Override            public void onPMessage(String pattern, String channel, String message) {                // 接收到消息,执行定时任务                System.out.println("收到消息:" + message);            }            }, _TOPIC);    }
}

SpringBoot中使用Redis实现分布式锁

5、springboot整合xxl-job实现定时任务

注:后续继续补充

http://www.yayakq.cn/news/366088/

相关文章:

  • 网站免费注册会员怎么做云南做网站要多少钱
  • 免费网站排名优化在线怎么查一个工地的施工单位
  • 文化传播网站建设wordpress缓存插件
  • 机关网站建设情况汇报响应式网站的建设
  • 做网站的岗位好吗河南网站建设制作价格
  • 织梦cms网站模板个人博客网站下载
  • 上海模板开发建站成都企业网站公司
  • 优秀国外网站设计赏析做网站公司价格多少
  • 国外外包网站建设银行流水查询网站
  • 国外服务器网站wordpress后台缺少菜单
  • 常州企业免费建站建设库平台
  • 泉州企业建站程序电子商务网站建设费用
  • 甘肃省建设厅备案在哪个网站免费做旅游海报的网站
  • 上海方正大厦网站建设免费男女打扑克的软件
  • 打开山东城市建设职业学院网站备案号如何绑定多个网站
  • 网站正在维护中 模板做化工回收上什么网站
  • 专门做物业催收的网站个人博客网页制作图片
  • 杭州仪器网站制作南阳网站建设公司
  • 做视频解析网站违法不重要的建设工程人员查询
  • 网站做新闻外链有作用吗做企业网站联系
  • 网站设计主要包括哪些步骤马鞍山市重点工程建设管理局网站
  • 专业人士怎样建网站门户网站建设招标方
  • 网站怎么做公司屏蔽ip网站吗
  • 自适应网站建设软件wordpress 添加自定义小工具
  • 北京网站设计培训班建站公司用的 商城系统
  • 旅游网站开发系统的er图做销售在哪些网站注册好
  • 网站设网页设计重庆万州网站建设多少钱
  • 上海网站高端定制小说素材网站
  • 做网站前台用什么软件泰安企业网站建设
  • 个人网站 免备案网站虚拟主机虚拟空间