Java多线程中的延时队列DelayQueue
天飞 2017-12-20 21:39:29 浏览40 评论0java string exception 多线程 class demo thread unit DelayQueue
摘要: 慢慢进入JAVA的内心世界, 今天也一直在和JAVA的语法作斗争, 到周三,写的一个基于SPRING BOOT的日志小模块,
慢慢进入JAVA的内心世界,
今天也一直在和JAVA的语法作斗争,
到周三,写的一个基于SPRING BOOT的日志小模块,
成型啦~~
关于DelayQueue,书上是这样说的:

Student.java
package demo.thread;
import java.util.concurrent.Delayed;
import java.util.concurrent.TimeUnit;
public class Student implements Delayed{
private String name;
private long workTime;
private long submitTime;
public String getName() {
return this.name + "交卷,用时 " + workTime;
}
public Student(String name, long submitTime) {
this.name = name;
this.workTime = submitTime;
this.submitTime = TimeUnit.NANOSECONDS.convert(submitTime, TimeUnit.MILLISECONDS )
+ System.nanoTime();
System.out.println(this.name + " 交卷, 用时 " + workTime);
}
@Override
public int compareTo(Delayed o) {
// TODO Auto-generated method stub
Student that = (Student) o;
return submitTime > that.submitTime? 1 :(submitTime < that.submitTime ? -1 :0);
}
@Override
public long getDelay(TimeUnit unit) {
// TODO Auto-generated method stub
return unit.convert(submitTime - System.nanoTime(), unit.NANOSECONDS);
}
}
ThreadMain.java
package demo.thread;
import java.util.concurrent.DelayQueue;
public class ThreadMain {
public static void main(String[] args) throws Exception {
final DelayQueue<Student> bq = new DelayQueue<Student>();
for (int i = 0; i < 5; i++) {
Student student = new Student("学生" + i, Math.round((Math.random()*10 + i)));
bq.put(student);
}
System.out.println("bq.peek();" + bq.peek().getName());
}
}
输出样子:

用云栖社区APP,舒服~
【云栖快讯】中办国办印发《推进互联网协议第六版(IPv6)规模部署行动计划》加快推进基于 IPv6 的下一代互联网规模部署,计划指出2025年末中国 IPv6 规模要达到世界第一,阿里云也第一时间宣布了将全面提供IPv6服务,那么在全面部署 IPV6 前,你需要了解都在这儿 详情请点击 评论文章 (0) (0) (0)