2014-03-05 31 views
0

我想安排一次时间的任务,任务为什么以及是什么情况:时间表事件

案例 我有一个游戏一个以上的事件,例如卡片游戏3场比赛,每场'比赛'都有用户赢得3场比赛中的2场比赛以赢得比赛。

1场最好的3场比赛 比赛的2最好的3场比赛 比赛的3最好的3场比赛

现在我想开始每场比赛,每3分钟,每场比赛都会拿1分,例如

小时 - 游戏

  1. 00:00开始第1场,并开始1场的游戏1
  2. 00:01结束比赛1场1
  3. 第1场的
  4. 00:01开始游戏2
  5. 00:02游戏结束1场的2
  6. 00:02开始游戏第1场的3
  7. 00:03游戏结束1场的3
  8. 00:03结束比赛1

Ofcourse每个任务只启动一次,永远不会再发生(它会再次发生,但没有使用相同的播放器/游戏ID /匹配ID)

所以我想我应该做的是创建一个M使用可运行的可运行任务将为每个游戏创建一个任务。游戏任务完成后,我应该关闭该线程,或者有其他的东西,你可以如何开始像上面的情况?

我已经读过很多有关Timer和ScheduledExecutorService类的内容,但是其中哪一个最好还有另一个更好的例子?

谢谢你的时间!

编辑:

Ofcourse总是你问了一个问题之后,你会发现一些事情。所以我会在这里发布我的课程,这不是动态课程,而是一个测试课程。 Runable现在可以在我需要的时候运行,唯一的问题是,当可执行文件被执行并完成时,他将被从线程中移除。或者在这些事件发生100.000.000事件后,线程会被取消吗?

import java.util.Timer; 
import java.util.TimerTask; 

import com.ibm.icu.util.GregorianCalendar; 

public class TaskScheduler { 

public static GregorianCalendar result = new GregorianCalendar(2014, 2, 5, 15, 54, 0); 
public static GregorianCalendar resulta = new GregorianCalendar(2014, 2, 5, 15, 55, 00); 

public static void main(String[] args) throws InterruptedException { 


    System.out.println("First thing: " + result.getTime()); 
    System.out.println("second thing: " + resulta.getTime()); 


    createNewTimerTask(1); 
    createNewTimerTask(21); 
    createNewTimerTask(31); 
    createNewTimerTask(41); 
    createNewTimerTask(51); 
    createNewTimerTask(61); 
    createNewTimerTask(71); 
    createNewTimerTask(81); 
    createNewTimerTask(91); 
    createNewTimerTask(01); 
    createNewTimerTask(111); 
    createNewTimerTask(122); 
    createNewTimerTask(133); 
    createNewTimerTask(144); 
    createNewTimerTask(155); 
    createNewTimerTask(166); 
    createNewTimerTask(177); 
} 

private static void createNewTimerTask(int id) { 
    Timer myTimer = new Timer(); 
    myTimer.schedule(new Test(id), resulta.getTime()); 
} 
} 



class Test extends TimerTask { 
public static GregorianCalendar result = new GregorianCalendar(2014, 2, 5, 15, 52, 0); 
private int id; 

Test(int id) { 
    this.id = id; 
} 

@Override 
public void run() { 
    try { 
     Thread.sleep(5000l); 
    } catch (InterruptedException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 

    System.out.println("ID: " + id); 
} 
} 

回答

0

在计时器任务结束后,它将被垃圾收集。在1000000个事件之后,创建另一个计时器任务将正常运行。