战斗中有个战斗等待时间
这个时间计时器
如果用java里的timer来处理是不是比较合适一些

解决方案 »

  1.   

    做过类似的小游戏,就是用Timer来实现的。别人怎么做的就不知道了。
      

  2.   

    嗯,用timer比较好。java.util.Timer 
    Sun JDK 提供的一种轻量级的计时器。Commonj Timer 
    ibm 和 BEA 联合制定和推出的一种适用于 J2EE 环境的计时器。WebSphere Application server Scheduler 
    ibm WebSphere Application server 提供的一种功能强大的计时器。
    java.util.Timerjava.util.Timer 是 Sun JDK 提供的一种计时器,用于使后台线程按计划执行指定任务,这些任务可以被执行一次,也可以被定期执行。每个 Timer 对象对应一个后台线程,顺序地执行所有计时器任务。如果完成某个计时器任务的时间太长,那么它会“独占”计时器的任务执行线程,从而可能延迟后续任务的执行。对 Timer 对象最后的引用完成并且所有未处理的任务都已执行完成后,计时器的任务执行线程会正常终止(并且成为垃圾回收的对象)。以下为一个使用 java.util.Timer 的例子:import java.util.Timer;
    import java.util.TimerTask;
    public class TimerTest {
        Timer timer;
        public TimerTest(int seconds) {
            timer = new Timer();
            timer.schedule(new TimerTestTask(), seconds*1000);
        }
        class TimerTestTask extends TimerTask {
            public void run() {
                system.out.println("In TimerTestTask, execute run method.");
                timer.cancel(); 
            }
        }
        public static void main(String args[]) {
            system.out.println("Prepare to schedule task.");
            new TimerTest(2);
            system.out.println("Task scheduled.");
        }
    }
     
    java.util.Timer 简单易用,比较适合提供轻量级的计时器功能。由于其创建的线程会超出容器的管理范围,因此不能应用于管理的环境中。如果用户需要在 J2EE 环境中提供计时器功能,可考虑使用后面即将介绍的 Commonj Timer 或 WebSphere Application server Scheduler。Commonj TimerCommonj Timer 是 Commonj 规范的一部分,它由 ibm 和 BEA 联合制定和推出,用以更好的响应客户和独立软件商的需求,给开发人员在开发可移植的服务端应用程序时提供一些更加简单和功能更加强大的方法。这个规范主要包括以下几个部分:Service Component Architecture,Service Data Objects,Work Manager and Timer 和 Enterprise Metadata Discovery。其中,Work Manager and Time 为在应用服务器中支持并发任务的执行提供了一些简单 API。这使用户可以方便地在 Servlet 和 EJB 中执行并发的计划任务,从而提高呑吐量,缩短服务端程序的响应时间,很好地解决了在 J2EE 环境中执行用户自定义的多线程并发与计时器服务的问题。Commonj Timer API 包括三个接口:TimerManager, Timer 和 TimerListener。应用程序可以通过 TimerManager 来定期调用 TimerListener。每个 TimerManager 的 shcedule 方法返回一个 Timer 对象。用户可以通过 TimerManager 的 JNDI 名称在管理环境的上下文中查找 TimerManager。用户可以通过以下三步来使用 Commonj Timer:在 web.xml 或者 ejb-jar.xml 中增加 Timer 的描述: <resource-ref>
        <res-ref-name>timer/MyTimer</res-ref-name>
        <res-type>commonj.timer.TimerManager</res-type>
        <res-auth>Container</res-auth>
        <res-sharing-scope>Unshareable</res-sharing-scope>
    </resource-ref>
     实现 TimerListener 接口: import commonj.timers.Timer;
    import commonj.timers.TimerListener;public class TestTimerListener implements TimerListener {
        private String input;    public TestTimerListener(String input) {
            this.input = input;
        }    public void timerExpired(Timer timer) {
            Date timeValue = new Date();
            system.out.println("In timerExpired method, time is " 
          + timeValue.toString() + ", input value is " + input);
        }
    }
     查找 TimerManager,调用 TimerListener,初始化任务并设置时间: InitialContext ctx = new InitialContext();
    TimerManager mgr = (TimerManager)
     ctx.lookup("java:comp/env/timer/MyTimer");
    TimerListener listener =new TestTimerListener ("test");
    // 启动计时器
    mgr.schedule(listener, 1000*60);
     Commonj Timer 提供了一种在 J2EE 环境中使用计时器的方法,它解决了 java.util.Timer 创建的线程超出容器管理范围的问题。由于它不同于 JMX Timer Service 与 JMX framework 之间的紧耦合,从而提供了更加友好和独立的 API。 Commonj Timer API 中的 timer 是瞬时的、非事务性的,并且运行于创建它的 JVM 中,因此对于对持久性、事务性和可恢复性有要求的集群环境并不适合。
      

  3.   

    如果是服务器端程序,即使用TIMER也要注意策略
    应该是TIMER来管理等待的队列,不是TIMER来管理这些单个的等待,否则资源占用太大
      

  4.   

    实现注意事项:此类可扩展到大量同时安排的任务(存在数千个都没有问题)。在内部,它使用二进制堆来表示其任务队列,所以安排任务的开销是 O(log n),其中 n 是同时安排的任务数。 实现注意事项:所有构造方法都启动计时器线程。