定时任务实现 java

来源:互联网 发布:spss面板数据回归分析 编辑:程序博客网 时间:2024/04/29 20:38
简单介绍一下背景,有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, 
01000);//设置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");
    }

}

 
原创粉丝点击