做个一个多线程的TimerTask的跑动,内嵌多个子线程

需求:

    List中有诸多数据,根据某一字段的区分,得到新的n个子List,对每个子List进行一个线程的跑动,每个子List中有诸多对象,每个对象做一个定时器,每2s执行一次,30s内无执行结果则退出。然后定时器时间的长短,根据每个对象处理的速度来定。诸如:处理一个对象时间预设定为30s,5个为150s,处理完一个对象,则在时间上减30s。额,上代码吧,好累。

package com.common.test;

import java.util.Timer;
import java.util.TimerTask;
import java.util.concurrent.CountDownLatch;

public class ThreadTimerTest {

    public MainsThread mainsThread;
    //private CountDownLatch threadsSignal;  
    
    public static void main(String[] args) {
        new ThreadTimerTest().task();
        //stopAllThread();
    }
    public void task(){
        for(int i=0;i<5;i++){
            mainsThread = new MainsThread(i);
            
            new Thread(mainsThread).start();
            
            //threadsSignal.countDown();
        }
    }
    public static void stopAllThread(){
     //   System.exit();
    }
}
class MainsThread implements Runnable{
    public int count;
    //MainThread mainThread;
    public int sign;
    public MainsThread(int i){
        //mainThread = new MainThread();
        count = 5;
        sign = i;
    }
    
    long startTime = System.currentTimeMillis();
    public void run() {
        for(int i=0;i<5;i++){
            Timer timer = new Timer();
            timer.schedule(new TimerTaskTest(startTime,this,timer,i),0, 2000);
            
        }
    }
}
class TimerTaskTest extends TimerTask{

    public MainsThread mainthread;
    public long startTime;
    public Timer timer;
    public int k;
    public TimerTaskTest(long startTime, MainsThread mainThread,Timer timer,int k){
        this.mainthread = mainThread;
        this.startTime = startTime;
        this.timer = timer;
        this.k = k;
    }
    public void run() {
       // System.out.println("------------------------------------------------"+Thread.currentThread().getName() +"-===");
        System.out.println(mainthread.sign+"--当前共有:"+mainthread.count+" 条线程;");
        // TODO Auto-generated method stub
        long endTime = System.currentTimeMillis();
        if(endTime - startTime > k*5*1000){
            mainthread.count = mainthread.count-1;
            System.out.println(mainthread.sign+" -----------------第 "+k+" 条线程:stop;  "+mainthread.count);
            timer.cancel();
        }
        
    }
    
}

猜你喜欢

转载自blog.csdn.net/ren814/article/details/81484209