/创建网吧对象
public class WangBar implements Runnable{
//创建延时队列
private DelayQueue<Netizen> dq=new DelayQueue<Netizen>();
//上机
public void shangJi(Netizen nt){
System.out.println("网名:"+nt.getName()+";"+"上网金额:"+nt.getMoney()+";"+"上网时间:"+new SimpleDateFormat("yyyy-MM-dd hh:mm:ss").format(new Date()));
dq.add(nt);
}
//下机
public void xiaJi(Netizen nt){
System.out.println("网名:"+nt.getName()+";"+"断网时间:"+new SimpleDateFormat("yyyy-MM-dd hh:mm:ss").format(new Date(nt.getEndTime())));
}
@Override
public void run() {
// TODO Auto-generated method stub
Netizen nt=null;
while(true){
try {
nt=dq.take();
xiaJi(nt);
if(dq.isEmpty()){
break;
}
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
public static void main(String[] args) throws InterruptedException {
Netizen nt = new Netizen("王彬彬",15);
WangBar wb=new WangBar();
wb.shangJi(nt);
TimeUnit.MILLISECONDS.sleep(5000);
Netizen nt1 = new Netizen("张浩",8);
wb.shangJi(nt1);
TimeUnit.MILLISECONDS.sleep(12000);
Netizen nt2 = new Netizen("王涛",12);
wb.shangJi(nt2);
new Thread(wb).start();
}
}
//创建用户对象
public class Netizen implements Delayed{
public String name;
public int money;
public long endTime;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getMoney() {
return money;
}
public void setMoney(int money) {
this.money = money;
}
public long getEndTime() {
return endTime;
}
public void setEndTime(long endTime) {
this.endTime = endTime;
}
public Netizen(String name, int money) {
super();
this.name = name;
this.money = money;
this.endTime = money*1000+System.currentTimeMillis();
}
@Override
public int compareTo(Delayed o) {
// TODO Auto-generated method stub
Netizen nt=(Netizen)o;
return this.getDelay(TimeUnit.MILLISECONDS)-nt.getDelay(TimeUnit.MILLISECONDS)>0?1:-1;
}
@Override
public long getDelay(TimeUnit unit) {
// TODO Auto-generated method stub
return unit.convert(endTime-System.currentTimeMillis(),TimeUnit.MILLISECONDS);
}
}
关于延时队列的场景运用(网吧打卡)
最新推荐文章于 2024-04-22 22:01:15 发布