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

做外贸找客户最好用的网站关键词排名关键词快速排名

做外贸找客户最好用的网站,关键词排名关键词快速排名,互联网十大创业项目,谷德设计网案例设计一,延迟任务应用场景? 一般用于处理订单,将redis中的数据延迟存入数据库,实现异步存储减少DB的压力 二, 延迟任务的实现方案有很多 DelayQueue Redisson MQ 时间轮 原理 JDK自带延迟队列,基于阻塞队列…

一,延迟任务应用场景?


一般用于处理订单,将redis中的数据延迟存入数据库,实现异步存储减少DB的压力

二, 延迟任务的实现方案有很多


DelayQueue

Redisson

MQ

时间轮

原理

JDK自带延迟队列,基于阻塞队列实现。

基于Redis数据结构模拟JDK的DelayQueue实现

利用MQ的特性。例如RabbitMQ的死信队列

时间轮算法

优点

  • 不依赖第三方服务

  • 分布式系统下可用

  • 不占用JVM内存

  • 分布式系统下可以

  • 不占用JVM内存

  • 不依赖第三方服务

  • 性能优异

缺点

  • 占用JVM内存

  • 只能单机使用

  • 依赖第三方服务

  • 依赖第三方服务

  • 只能单机使用

三,延迟任务的原理


 1,DelayQueue的源码

public class DelayQueue<E extends Delayed> extends AbstractQueue<E>implements BlockingQueue<E> {private final transient ReentrantLock lock = new ReentrantLock();private final PriorityQueue<E> q = new PriorityQueue<E>();// ... 略
}
  •  DelayQueue实现了BlockingQueue接口,是一个阻塞队列。队列就是容器,用来存储东西的.
  • DelayQueue的泛型定义

    • <E extends Delayed> 

  • 这说明存入DelayQueue内部的元素必须是Delayed类型

 进一步查看Delay接口

public interface Delayed extends Comparable<Delayed> {/*** Returns the remaining delay associated with this object, in the* given time unit.** @param unit the time unit* @return the remaining delay; zero or negative values indicate* that the delay has already elapsed*/long getDelay(TimeUnit unit);
}

看完之后我们先不管 ,继续看他的父类Comparable<Delayed>

里面有一个方法,用于比较大小

2,从源码中可以看出,Delayed类型必须具备两个方法:

  • getDelay():获取延迟任务的剩余延迟时间

  • compareTo(T t):比较两个延迟任务的延迟时间,判断执行顺序

    • 根据源码中的注解可以看出

      • zero or negative values indicate * that the delay has already elapsed

      • 零或者负值表示延迟已经过去

四,DelayQueue的用法


1,定义一个延迟任务的工具类

package com.tianji.learning.utils;import lombok.Data;import java.time.Duration;
import java.util.concurrent.Delayed;
import java.util.concurrent.TimeUnit;@Data
public class DelayTask<D> implements Delayed {private D data;    //用于存放延迟任务的数据private long deadlineNanos;    //延迟任务延迟到什么时候/***    delayTime    延迟多长时间*/public DelayTask(D data, Duration delayTime) {this.data = data;//用当前时间和需要延迟的时间相加得到的结果就是延迟任务延迟结束的时间this.deadlineNanos = System.nanoTime() + delayTime.toNanos();}/***    这个方法是用于获取延迟任务的剩余时间*/@Overridepublic long getDelay(TimeUnit unit) {return unit.convert(Math.max(0, deadlineNanos - System.nanoTime()), TimeUnit.NANOSECONDS);}//将队列中的延迟任务的剩余时间进行比较,然后进行排队@Overridepublic int compareTo(Delayed o) {long l = getDelay(TimeUnit.NANOSECONDS) - o.getDelay(TimeUnit.NANOSECONDS);if(l > 0){return 1;}else if(l < 0){return -1;}else {return 0;}}
}

2,使用延迟队列

// 1.初始化延迟队列
DelayQueue<DelayTask<String>> queue = new DelayQueue<>();
// 2.向队列中添加延迟执行的任务                        //当前延迟时间是Second
queue.add(new DelayTask<>("延迟任务数据,可以是方法", Duration.ofSeconds(延迟时间)));
// 3.尝试执行任务
DelayTask<String> task = queue.take();
//执行延迟队列中的任务
task.getData()

http://www.tj-hxxt.cn/news/100442.html

相关文章:

  • 怎么用vs做网站网站建设推广
  • 建设部网站建筑工程质保期网站排名靠前方法
  • 设计欣赏网seo监控
  • 蚌埠市做家教网站百度一下官网首页百度一下
  • 建筑材料批发网站农产品网络营销
  • 专业的丹阳网站建设软文世界
  • 西峡网站建设2023疫情最新情况
  • 做网站的关键技术品牌传播推广方案
  • 网站建设和架构国内最新消息新闻
  • wordpress连接不了ftpseo每日工作内容
  • 北京做网站海宇勇创开发一个app平台大概需要多少钱?
  • 创建公司网站如何制作一个简易网站
  • 重庆五洲妇儿医院石家庄网络推广优化
  • 一般使用的分辨率的显示密度是多少dpi?关于进一步优化
  • 怎样做模板网站免费舆情监测平台
  • wap浏览器安卓版seo培训赚钱
  • 福建建设中心网站排行榜
  • 苏州网站建设公司山东关键词快速排名
  • 网站的建立过程关键词排名优化易下拉技巧
  • 微信网站的链接标志图片如何做镇江seo公司
  • 网络营销个人感悟小结网站seo优化网站
  • 互联网站备案表企业站seo外包
  • 安卓开发简单网站开发代码下载网站快速排名
  • 代理办营业执照的公司seo免费工具
  • 申请网站空间就是申请域名数据网站
  • 山东网站seo网页设计大作业
  • html5博客网站源码如何在各大平台推广
  • 快看漫画小程序入口厦门seo大佬
  • 朝阳企业网站建设方案谷歌推广代理
  • 做英文的小说网站永久免费进销存管理软件手机版