package com.inspire.juc.c_025;
import java.net.StandardSocketOptions;
import java.util.concurrent.BlockingQueue;
import java.util.concurrent.DelayQueue;
import java.util.concurrent.Delayed;
import java.util.concurrent.TimeUnit;
public class T07_DelayQueue {
static class MyTask implements Delayed{
String name;
long runningTime;
MyTask(String name,long rt){
this.name=name;
this.runningTime=rt;
}
@Override
public long getDelay(TimeUnit unit) {
return unit.convert(runningTime-System.currentTimeMillis(),TimeUnit.MILLISECONDS);
}
@Override
public int compareTo(Delayed o) {
if(this.getDelay(TimeUnit.MILLISECONDS)<o.getDelay(TimeUnit.MILLISECONDS)){
return -1;
}else if(this.getDelay(TimeUnit.MILLISECONDS)>o.getDelay(TimeUnit.MILLISECONDS)){
return 1;
}else {
return 0;
}
}
@Override
public String toString() {
return "MyTask{" +
"name='" + name + '\'' +
", runningTime=" + runningTime +
'}';
}
}
static BlockingQueue<MyTask> tasks=new DelayQueue<>();
public static void main(String[] args) throws InterruptedException {
long now=System.currentTimeMillis();
MyTask t1=new MyTask("t1",now+5000);
MyTask t2=new MyTask("t2",now+4000);
MyTask t3=new MyTask("t3",now+3000);
MyTask t4=new MyTask("t4",now+2000);
MyTask t5=new MyTask("t5",now+1000);
tasks.put(t1);
tasks.put(t2);
tasks.put(t3);
tasks.put(t4);
tasks.put(t5);
System.out.println(tasks);
for (int i = 0; i < 5; i++) {
System.out.println(tasks.take());
}
}
}
多線程與高併發-併發容器6_5:按照緊迫程度排序的DelayQueue
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.