@Test
public void Juc() throws InterruptedException {
System.out.println("马上输出");
DelayQueue<Delayed> delayeds = new DelayQueue<>();
new Thread(() -> {
delayeds.offer(new MyDelayedTask("task1", 3000));
System.out.println("异步");
try {
Delayed take = delayeds.take();
System.out.println("异步三秒后输出");
} catch (InterruptedException e) {
e.printStackTrace();
}
}).start();
System.out.println("主线程");
while (true){}
}
class MyDelayedTask implements Delayed {
private String name;
private long start = System.currentTimeMillis();
private long time;
public MyDelayedTask(String name, long time) {
this.name = name;
this.time = time;
}
@Override
public long getDelay(TimeUnit unit) {
return unit.convert((start + time) - System.currentTimeMillis(), TimeUnit.MILLISECONDS);
}
@Override
public int compareTo(Delayed o) {
MyDelayedTask o1 = (MyDelayedTask) o;
return (int) (this.getDelay(TimeUnit.MILLISECONDS) - o.getDelay(TimeUnit.MILLISECONDS));
}
}
1.延迟任务实现delay接口,重写getDalay与compareTo方法
2.DelayQueue创建延迟队列,创建线程,队列添加延迟任务,当队列内任务没有take的时候线程会堵塞
版权声明:本文为looperjustice原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。