背景
网民在网吧上网,交钱上网,到点下机,一个是wangmin实体类,要继承Delayed接口,一个是WangBa类,实现add、take队列元素等信息:
public class Wangmin implements Delayed {
//姓名
private String name;
//身份证号
private int id;
//截止时间
private long endTime;
//时间工具类
private TimeUnit timeunit;
@Override
public long getDelay(TimeUnit unit) {
return endTime - System.currentTimeMillis();
}
@Override
public int compareTo(Delayed o) {
Wangmin w = (Wangmin)o;
return getDelay(timeunit) - w.getDelay(timeunit)>0?1:0;
}
public Wangmin(String name, int id, long endTime) {
this.name = name;
this.id = id;
this.endTime = endTime;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public long getEndTime() {
return endTime;
}
public void setEndTime(long endTime) {
this.endTime = endTime;
}
public TimeUnit getTimeunit() {
return timeunit;
}
public void setTimeunit(TimeUnit timeunit) {
this.timeunit = timeunit;
}
}
public class WangBa implements Runnable {
private DelayQueue<Wangmin> queue = new DelayQueue<>();
private boolean yingye = true;
/**
* 上机
* @param name
* @param id
* @param money
*/
public void shangji(String name,int id,int money){
Wangmin man = new Wangmin(name,id,1000*money+System.currentTimeMillis());
System.out.println("网民:"+man.getName()+",身份证号:"+man.getId()+",交钱:"+money+",上机时间:"+TimeMillisToString(System.currentTimeMillis())+",上机截止时间:"+TimeMillisToString(man.getEndTime()));
queue.add(man);
}
/**
* 下机
* @param man
*/
public void xiaji(Wangmin man){
System.out.println("网民:"+man.getName()+",身份证号:"+man.getId()+"时间到,准备下机…… ……");
}
@Override
public void run() {
while(yingye){
try {
Wangmin man = queue.take();
xiaji(man);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
public static void main(String[] args) {
System.out.println("网吧开始营业…… ……");
WangBa wangba = new WangBa();
new Thread(wangba).start();
wangba.shangji("路人甲",111,1);
wangba.shangji("路人乙",222,10);
wangba.shangji("路人丙",333,5);
}
/**
* 时间戳转化成String
* @param dateMillis
* @return
*/
public String TimeMillisToString(long dateMillis){
return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(dateMillis);
}
}