使用java.util.concurrent包编写一个延时执行的任务

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 stubthis.player = player;}@Overridepublic 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;}@Overridepublic 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包编写一个延时执行的任务

相关文章:

你感兴趣的文章:

标签云: