需求:
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();
}
}
}