Java DelayQueue包装类
public class DelayQueueWrapper<T> {
private TimeUnit timeUnit;
private final Long capacity;
private long currentSize;
private DelayQueue<DelayQueueTarget<T>> delayQueue;
public DelayQueueWrapper(long capacity, TimeUnit timeUnit) {
this.delayQueue = new DelayQueue<>();
this.capacity = capacity;
this.currentSize = 0;
}
/**
* offer element
* @param t
* @param delay
* @return
*/
public synchronized boolean offer(T t, long delay) {
if (this.currentSize > capacity) {
return false;
}
this.delayQueue.add(new DelayQueueTarget<T>(t, timeUnit.toMillis(delay)));
this.currentSize++;
return true;
}
/**
* peek element
* @return
*/
public synchronized T peek(){
if (this.currentSize < 0) {
return null;
}
T t = Optional.ofNullable(this.delayQueue.peek())
.map(DelayQueueTarget::getData)
.orElse(null);
this.currentSize--;
return t;
}
public static class DelayQueueTarget<T> implements Delayed{
private T data;
private long startTime;
public DelayQueueTarget(T data, long delayInMilliseconds) {
this.data = data;
this.startTime = System.currentTimeMillis() + delayInMilliseconds;
}
@Override
public long getDelay(TimeUnit unit) {
long diff = startTime - System.currentTimeMillis();
return unit.convert(diff, TimeUnit.MILLISECONDS);
}
@Override
public int compareTo(Delayed o) {
return Ints.saturatedCast(
this.startTime - ((DelayQueueTarget<?>) o).startTime);
}
public T getData() {
return data;
}
}
}
Java DelayQueue包装类的更多相关文章
- 浅谈Java的包装类
一.什么是Java包装类 所谓Java包装类,就是将Java中的8种基本数据类型分别包装成为类的形式.包装类与基本数据类型的对应关系如下表所示. 基本数据类型 包装类 byte Byte short ...
- Java开发知识之Java的包装类
Java开发知识之Java的包装类 一丶什么是包装类 包装类的意思就是对基本数据类型封装成一个类.这些类都是Number的子类.区别就是封装数据类型不同.包含的方法基本相同. 具体可以查询JAVA A ...
- [java初探09]__关于java的包装类
前言 在Java语言的学习过程中,我们逐渐的理解了Java面向对象的思想,与类和对象的应用.但是在基本数据类型的使用上,我们无法将其定义为一个对象,通过使用对象的方法来使用它们,但是Java语言的思想 ...
- Java学习——包装类
Java学习——包装类 摘要:本文主要介绍了Java中常用的包装类和基本类型之间的转换,包装类或基本类型和String之间的转换. 部分内容来自以下博客: https://www.cnblogs.co ...
- 小白学Java:包装类
目录 小白学Java:包装类 包装类的继承关系 创建包装类实例 自动装箱与拆箱 自动装箱 自动拆箱 包装类型的比较 "=="比较 equals比较 自动装箱与拆箱引发的弊端 自动装 ...
- Java:包装类小记
Java:包装类 对 Java 中的 包装类 这个概念,做一个微不足道的小小小小记 基本数据&包装类 四类八种基本数据类型: 数据类型 关键字 内存占用 取值范围 字节型 byte 1个字节 ...
- Java api 入门教程 之 JAVA的包装类
Java语言是一个面向对象的语言,但是Java中的基本数据类型却是不面向对象的,这在实际使用时存在很多的不便,为了解决这个不足,在设计类时为每个基本数据类型设计了一个对应的类进行代表,这样八个和基本数 ...
- Java 中包装类wrapped type之间以及和primitive type的比较
注意, 包装类的实例之间比较, 是不能直接用 == 的 public static void main(String[] args) { // TODO Auto-generated method s ...
- JAVA的包装类 【转】
Java语言是一个面向对象的语言,但是Java中的基本数据类型却是不面向对象的,这在实际使用时存在很多的不便,为了解决这个不足,在设计类时为每个基本数据类型设计了一个对应的类进行代表,这样八个和基本数 ...
- java的包装类(转)
Java语言是一个面向对象的语言,但是Java中的基本数据类型却是不面向对象的,这在实际使用时存在很多的不便,为了解决这个不足,在设计类时为每个基本数据类型设计了一个对应的类进行代表,这样八个和基本数 ...
随机推荐
- Access数据库使用
简单介绍创建表,设置表属性,内容 双击打开软件,新建空白数据库 上面创建--表,右侧右键点击表1,选择保存,输入表名称. 左侧右键点击表--打开设计视图 设置表内容及格式,首行默认为主键,需右键点主键 ...
- [UnityShader]说厌了的遮挡显示
首先是效果 这个其实有相当多的地方在说了,我就不嚼舌根了 大概原理:一个Shader两个Pass,第一个Pass不管深度,都渲染,但是不写入深度,第二个Pass几乎没有改动,因为后执行,会覆盖掉第一个 ...
- goland 无法跳转 struct等
goland 提示: Cannot find declaration to go to 表现为:无法跳转,标红 但实际上对应文件是存在该struct或var 解决办法: ref:https://sta ...
- N63050 第十周运维作业
十九.VPN服务 1.firewalld和最新技术nft实现防火墙功能(65分钟) 2.open-v-p-n介绍和环境准备(48分钟) 3.open-v-p-n实现CA证书(45分钟) 4.open- ...
- SAP 交货单抬头客制化界面以及字段
需求 因为涉及系统之间的家伙但传输,方便业务查看该交货单是否已经发送,因此再交货单的抬头页面进行增强,给出一个是否发送的字段显示.如下: 业务加载项 LE_SHP_TAB_CUST_HEAD se19 ...
- mybatis面试资料
1.#{}和${}的区别 #{} 数据类型检查: 若检测到字符串类型,就加上引号: 若检测到数值类型,就不加引号. 安全检查: 若变量的值带有引号,会对引号进行转义处理,这样可以防止sql注入. ${ ...
- Teamcity 部署
1.先安装docker环境 team_city安装 2.docker run -it --name teamcity-server \ -v /data/teamctiy_data/:/data/te ...
- netmiko批量操作网络设备_pandas版
from concurrent.futures import ThreadPoolExecutor import netmiko import os from threading import Loc ...
- Linux系统Shell脚本第二章:条件测试、正整数字符串比较与if、case语句
目录 一.条件测试 1.三种测试方法 2. 正整数值比较 3.字符串比较 4.逻辑测试 二.脚本中常用命令 1.echo命令 2.date命令 3.cal命令 4.tr命令 5.cut命令 6.sor ...
- Web开发的常用攻击和防御方式
一.XSS 主要利用:1.盲目相信用户提交的内容 2.直接把用户的字符串转化成DOM 分类: 1.存储型XSS,恶意脚本存在数据库中,所有访问页面的用户都会被攻击 2.反射型XSS,脚本写在URL中, ...