Wangmin:
package com.mhm.delayQueue;
import java.util.concurrent.Delayed;
import java.util.concurrent.TimeUnit;
public class Wangmin implements Delayed {
private int id;
private String name;
// 下机时间
private long endtime;
private TimeUnit timeUnit = TimeUnit.SECONDS;
public int getId() {
return this.id;
}
public String getName() {
return this.name;
}
public Wangmin(int id, String name, long endtime) {
this.id = id;
this.name = name;
this.endtime = endtime;
}
@Override
public int compareTo(Delayed arg0) {
Wangmin wm = (Wangmin)arg0;
long d = this.getDelay(this.timeUnit) - wm.getDelay(this.timeUnit);
if (d > 0) {
return 1;
} else if (d == 0) {
return 0;
} else {
return -1;
}
}
@Override
public long getDelay(TimeUnit arg0) {
// return unit.convert(submitTime - System.nanoTime(), TimeUnit.NANOSECONDS);
long flag = this.endtime - System.currentTimeMillis();
// System.out.println(this.name + ", " + flag);
return flag;
}
}
wangba:
package com.mhm.delayQueue;
import java.util.concurrent.DelayQueue;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
public class Wangba implements Runnable {
private static final Logger logger = LogManager.getLogger("Wangba");
private DelayQueue<Wangmin> wmQueye = new DelayQueue<Wangmin>();
public boolean yinye = true;
public void shangji(int id, String name, int money) {
Wangmin wm = new Wangmin(id, name, 1000*money + System.currentTimeMillis());
logger.debug(name + ", 上机" + money + "秒");
this.wmQueye.add(wm);
}
public void xiaji(Wangmin wm) {
logger.debug(wm.getName() + ", 下机");
}
@Override
public void run() {
while(yinye) {
Wangmin wm;
try {
// 会按排序取出元素
wm = wmQueye.take();
xiaji(wm);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
public static void main(String[] args) {
logger.debug("开始营业");
Wangba wb = new Wangba();
Thread shangwang = new Thread(wb);
shangwang.start();
wb.shangji(8, "444", 10);
wb.shangji(10, "111", 1);
wb.shangji(5, "222", 5);
wb.shangji(20, "333", 2);
}
}