简单介绍一下背景,有N个人,要求每秒出现一个人,间隔也为一秒,不能重复,总耗时不能超过N+1秒
/*******************************************************************************
* $Header$
* $Revision$
* $Date$
*
*==============================================================================
*
* Copyright (c) 2001-2006 Primeton Technologies, Ltd.
* All rights reserved.
*
* Created on 2007-10-18
*******************************************************************************/

/**
* TODO 此处填写 class 信息
*
* @author wangwh (mailto:wangwh@primeton.com)
*/
/*
* 修改历史
* $Log$
*/
import
java.util.HashMap;
import
java.util.HashSet;
import
java.util.Map;
import
java.util.Set;
import
java.util.Timer;
import
java.util.TimerTask;
/*
* 创建一个任务类
*/
class
MyTimeTask
extends
TimerTask
{
public static long oldtime = System.nanoTime();//这里的时间都是用于测试运行周期的,以钠秒为单位.

private long oldtime2 = 0;//

private static Set set = new HashSet();//用set 来存取Object,也可用List;

public static int count = 0;//总人数;
/*
* 构造器
*/
MyTimeTask(int count) {
this.count = count;
}
/*
* 入栈方法
*/
public void push(Object o) {
set.add(o);
}
/*
* 出栈方法
*/
public Object pop() {
int t = (int) Math.random() % count;//取随机数
Object o = (set.toArray())[t];//取随机对象,这里可以改进一下,太丑了
set.remove(o);//取完后删除
count--;//将总人数减一
return o;
}
/*
*run方法,
*/
public void run() {
long t = System.nanoTime() - oldtime;
if(count==0)return ;//当最后一个人出栈的时候,不再执行
System.out.println("出栈的是 " + pop()+ "号 耗时 "+ t+" 钠秒");

oldtime = System.nanoTime();
}
}

public
class
TimerTest
{

public static void main(String[] args) {
long oldtime2 = System.currentTimeMillis();
MyTimeTask myTask = new MyTimeTask(200);
Timer myTimer = new Timer();
//将人放入栈中
for (int i = 0; i < 200; i++) {
myTask.push(i);
}
myTimer.scheduleAtFixedRate(myTask, 0, 1000);//设置myTask的运行周期;并调用其RUN()方法
try {
Thread.sleep(200000);//主程序sleep 16秒,如果不够,可以再加
} catch (InterruptedException exc) {
exc.printStackTrace();
}
myTimer.cancel();//结束Timer
long t = System.currentTimeMillis() - oldtime2;
System.out.println("This process spend . " + t+ " second");
}
}

/*******************************************************************************































































































