package com.letv.lazybox.task;
/**
若干参赛者参加竞走比赛,每组比赛有规定不同的全程米数,总赛时长;运动员若在规定赛时未跑完全程则出局
*/
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Iterator;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;
public class TaskContraller {
public static void main(String[] args) {
//初始化
ConcurrentHashMap<String, WalkingTask> walktaskmap = new ConcurrentHashMap<String, WalkingTask>();
Player tom = new Player("Tom", 1000, 2000, 20);
Player kitty = new Player("kitty", 800, 3000, 10);
walktaskmap.put("Tom", new WalkingTask(tom));
walktaskmap.put("kitty", new WalkingTask(kitty));
System.out.println(new SimpleDateFormat("HH:mm:ss").format(new Date(
System.currentTimeMillis())));
//定义一个容量为50个线程的线程池
final ScheduledExecutorService pool = Executors
.newScheduledThreadPool(50);
Iterator<String> ite = walktaskmap.keySet().iterator();
while (ite.hasNext()) {
String name = ite.next();
WalkingTask walkingTask = walktaskmap.get(name);
System.out.println(name + " is ready to walking...!");
//立即执行任务,开始比赛
pool.execute(walkingTask);
//延时执行任务,停止比赛
StopTask stopTask = new StopTask(walktaskmap, name);
pool.schedule(stopTask, walkingTask.getPlayer().getTotalSeconds(),
TimeUnit.SECONDS);
}
System.out.println("main thread....");
}
}
/**
竞走任务类
*/
class WalkingTask implements Runnable {
private boolean isStop = false; //比赛是否停止
private Player player;//参赛运动员信息
public boolean isStop() {
return this.isStop;
}
public void setStop(boolean isStop) {
this.isStop = isStop;
}
public Player getPlayer() {
return this.player;
}
public void setPlayer(Player player) {
this.player = player;
}
public WalkingTask(Player player) {
// TODO Auto-generated constructor stub
this.player = player;
}
@Override
public void run() {
for (int i = 0; i <= this.player.getMeters(); i++) {
if (this.isStop) {
break;
}
System.out.println(this.player.getName() + " run:" + i + " m!");
try {
Thread.sleep(this.player.getMillsecond());
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
/**
中止比赛任务类
*/
class StopTask implements Runnable {
private final String key; //被中止的运动员姓名
private final ConcurrentHashMap<String, WalkingTask> mytasks;
public StopTask(ConcurrentHashMap<String, WalkingTask> mytasks, String name) {
this.mytasks = mytasks;
this.key = name;
}
@Override
public void run() {
this.mytasks.get(this.key).setStop(true);
String endTime = new SimpleDateFormat("HH:mm:ss").format(new Date(
System.currentTimeMillis()));
System.out.println("[ " + this.key + "] GAME OVER ! EndTime ="
+ endTime);
}
}
/**
运动员信息类
*/
class Player {
private String name;//姓名
private int meters;//参赛里程
private int millsecond;//该运动员平均每跑一米用时
private int totalSeconds;//总赛时
public Player(String name, int meters, int millsecond, int totalSeconds) {
this.name = name;
this.meters = meters;
this.millsecond = millsecond;
this.totalSeconds = totalSeconds;
}
public String getName() {
return this.name;
}
public void setName(String name) {
this.name = name;
}
public int getMeters() {
return this.meters;
}
public void setMeters(int meters) {
this.meters = meters;
}
public int getMillsecond() {
return this.millsecond;
}
public void setMillsecond(int millsecond) {
this.millsecond = millsecond;
}
public int getTotalSeconds() {
return this.totalSeconds;
}
public void setTotalSeconds(int totalSeconds) {
this.totalSeconds = totalSeconds;
}
}使用java.util.concurrent包编写一个延时执行的任务
原文地址:http://blog.csdn.net/apaking/article/details/45871309