java中如何控制时间间隔?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java中如何控制时间间隔?相关的知识,希望对你有一定的参考价值。
比如说我写坦克大战,只允许在发射炮弹后一定时间间隔后才能再次发射炮弹,要怎么控制?
请教各位高手,我还是菜鸟,希望能解释得详细一点,谢谢~
1、基础知识
java.util.Timer
一种线程设施,用于安排以后在后台线程中执行的任务。可安排任务执行一次,或者定期重复执行。此类是线程安全的:多个线程可以共享单个 Timer 对象而无需进行外部同步。
java.util.TimerTask
由 Timer 安排为一次执行或重复执行的任务。
2、示例代码
该示例实现这样一个功能,在系统运行期间,每30分钟,系统自动检查连接池中的可用连接数,并输出到日志中。
首先创建一个需要定时执行的任务类,这个任务类需要继承TimerTask,然后重写run()方法,run()方法体中的代码就是定时需要执行的操作,在本demo中,就是获取连接池中当前可用连接数,并输出到日志中,具体实现代码如下:
public class TaskAvailableConnectNumber extends TimerTask
private Logger log = Logger.getLogger(TaskAvailableConnectNumber.class);
private ConnectionPool pool=ConnectionPool.getInstance();
@Override
publicvoid run()
log.debug("当前连接池中可用连接数"+pool.getAvailableConnectNumber());
下面定义一个监听器,负责在应用服务器启动时打开定时器,监听器需要实现ServletContextListener接口,并重写其中的contextInitialized()和contextDestroyed()方法,代码如下:
public class OnLineListener implements ServletContextListener
private Logger log = Logger.getLogger(OnLineListener.class);
Timer timer = null;
//在应用服务器启动时,会执行该方法
publicvoid contextInitialized(ServletContextEvent arg0)
//创建一个定时器,用于安排需要定时执行的任务。
timer = new Timer();
//为定时器安排需要定时执行的任务,该任务就是前面创建的任务类TaskAvailableConnectNumber,并指定该任务每30分钟执行一次。
timer.schedule(new TaskAvailableConnectNumber(), 0, 30*60*1000);
log.debug("启动定时器");
//应用服务器关闭时,会执行该方法,完成关闭定时器的操作。
public void contextDestroyed(ServletContextEvent arg0)
if(timer!=null)
timer.cancel();//关闭定时器
log.debug("-----定时器销毁--------");
监听器要想正常运行,需要在web.xml文件中进行配置,配置信息如下:
<!-- 监听器配置开始 -->
<listener>
<listener-class>
cn.sdfi.listen.OnLineListener
</listener-class>
</listener>
<!-- 监听器配置结束 -->
以上步骤完成后,一个简单的定时器就算开发完成了。 参考技术A 例如发射炮弹的类class Paodan,有个静态变量为time,发射炮弹时,记录当前时间.
下次在调用发射炮弹的方法时,判断当前时间和time的时间间隔是否符合你的要求,不符合就不发射
大致就是这样了本回答被提问者采纳 参考技术B 不是那样的,你要等发射出的炮弹碰到物体会消失,消失后就可以了 ,这个控制可以分为两类:
1、用坐标来控制炮弹是否已经出了定义的界面
2、中间碰到东西会触发事件,用这个触发事件来控制可以发射下一颗炮弹。
这是很简单的语法和逻辑了吧 参考技术C 时间=replace(formatdatetime(rs("addtime"),2),"-","/")
参考技术D 启动线程
以上是关于java中如何控制时间间隔?的主要内容,如果未能解决你的问题,请参考以下文章
java - 如何在java脚本或jquery中单击两次相同的按钮时计算间隔时间