/*******************************************************************************
* $Header$
* $Revision$
* $Date$
*
*==============================================================================
*
* Copyright (c) 2001-2006 Primeton Technologies, Ltd.
* All rights reserved.
*
* Created on 2007-10-18
*******************************************************************************/
/**
* TODO 此處填寫 class 信息
*
* @author wangwh (mailto:[email protected])
*/
/*
* 修改歷史
* $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");
}
}