java怎么关掉定时器_java – 取消定时器
我已经实现了一个令牌系统,它可以分配固定数量的令牌.分配的每个令牌启动一个Timer,该Timer在几分钟后到期并清除该令牌槽以供重用.如果用户在计时器到期之前验证令牌,则应该取消计时器并使用另一个令牌有效期重置.我似乎无法从计时器线程外取消计时器,这是预期的行为.片段如下:
/**
* Fills one of the available slots with a new session key
* @param sessionKey
* @return true on slot fill success - false on fail
*/
public boolean fillSlot(String sessionKey)
{
if(count
{
//Add key to slot
slots.add(sessionKey);
//Up the key count
upCount();
//Set up expiry timer
Timer timer = new Timer();
timer.schedule(new ExpiringTokentask(timer,sessionKey), EXPIRY_TIME);
timers.put(sessionKey, timer);
return true;
}
return false;
}
/**
* Check if a given key is stored in the slots
* reset timer every time key is checked
* @param sessionKey
* @return true on key found false on not found
*/
public boolean checkSlot(String sessionKey)
{
//TODO: More efficient key search and storage for larger user sets
//TODO: Upgrade from memory array to h2 embedded DB
for(int i=0;i
{
if(sessionKey.equals(slots.get(i)))
{
//Reset timer
Timer timer = timers.get(sessionKey);
//Can't seem to do this
// timer.cancel();
timer.schedule(new ExpiringTokentask(timer,sessionKey), EXPIRY_TIME);
//Return token validation
return true;
}
}
return false;
}
private class ExpiringTokentask extends TimerTask
{
private Timer timer;
private String expireToken;
public ExpiringTokentask(Timer timer, String sessionKey)
{
this.timer = timer;
this.expireToken = sessionKey;
System.out.println(sessionKey);
}
public void run() {
System.out.format("Time's up!%n");
clearSlot(expireToken);
timer.cancel(); //Terminate the timer thread
}
}
解决方法:
如前所述,您可以取消提交给计时器的TimerTask而不是取消计时器,这样您就不需要更新更多的计时器.
你在做什么:
timer.cancel();
timer.schedule(...);
将抛出IllegalStateExceptions,因为您无法在已取消的计时器上安排新任务.
所以不要这样做:timer.cancel()
使您的映射成为从会话密钥到TimerTasks的映射,并取消TimerTask而不是Timer.这样您就不必新建新的计时器,并且在取消一个或多个任务后,计时器将按预期工作.您还可以使用一个计时器来处理多个会话.现在你正在制作一个Timer,因此每个会话一个线程.
另一方面,您不应该使用java.util.Timer.如果任何TimerTasks抛出异常会发生什么?你的计时器将被杀死,永远不会再次运行!如果你的一个TimerTasks很慢或无限期阻塞怎么办?该定时器上的任何其他TimerTasks将无法执行.请考虑使用ScheduledThreadPoolExecutor.我确信java.util.Timer将在下一个Java版本中弃用.
标签:java,timer
来源: https://codeday.me/bug/20190717/1485016.html
java怎么关掉定时器_java – 取消定时器相关推荐
- javascript定时器,取消定时器,及js定时器优化方法
版权声明:转载请附链接,就这个要求. https://blog.csdn.net/johnstrive/article/details/42216005 通常用的方法: 启动定时器: window.s ...
- uni-app 中使用定时器和取消定时器
uni-app 中使用定时器和清除定时器 uni-app 中我们应该如何使用定时器呢?在结束后我们该如何让清除定时器? 下面我们就来分享一下吧. 1. 定义一个timer data(){return{ ...
- java多线程机制计时器_java多线程定时器与单例模式
定时器与单例模式 本次更新的主要内容是多线程中的定时器Timer和单例模式,本来打算分两次更新的,这次就在一起更新了.这次更新完之后,多线程的基础理论知识系列就完结了,后续会发布Mysql的内部技术分 ...
- android定时器取消,Android定时器崩溃取消
我有一个定时器运行,然后熄灭,并做了一些事情,定时器启动罚款.Android定时器崩溃取消 然后我想要做的是点击一个按钮,然后创建一个电子邮件.除了在计时器运行时单击该按钮之外,一切正常,应用程序崩溃 ...
- java项目中多个定时器_在java项目中如何使用Timer定时器
在java项目中如何使用Timer定时器 发布时间:2020-11-16 16:36:16 来源:亿速云 阅读:97 作者:Leah 在java项目中如何使用Timer定时器?很多新手对此不是很清楚, ...
- java定时器、Spring定时器和Quartz定时器
当前java程序中能够实现定时的主要有三种方式,分别是:java定时器,spring定时器,quartz定时器. 下面依次讲讲他们的应用! java定时器的应用 其实java很早就有解决定时器任 ...
- TCP的定时器系列 — 保活定时器(有图有代码有真相!!!)
转载 主要内容:保活定时器的实现,TCP_USER_TIMEOUT选项的实现. 内核版本:3.15.2 我的博客:http://blog.csdn.net/zhangskd 原理 HTTP有Keepa ...
- STM32F4 定时器TIM(1)定时器控制输出【使用库函数】
高级时钟控制定时器TIM1&TIM8简介: STM32F4的高级控制定时器包含一个自动重装载计数器,计数器的输入是一个被预分频的系统时钟. 这个定时器有多种用途,包括车辆输入信号长度(输入捕获 ...
- STM32定时器学习---基本定时器
STM32F1系列的产品,除了互联型产品外,工位8个定时器 TIM6.TIM7:基本定时器 TIM2/3/4/5:通用定时器 TIM1.TIM8:高级定时器 三种定时器的区别: 基本定时器: ...
最新文章
- Java学习笔记07--日期操作类
- php.ini来配置session,php.ini 配置session自动开启
- 打造杰出软件开发团队的12条指导建议
- 启动hbase后hregionserver没有启动
- SAP Spartacus Set Active BaseSite action执行的时间点 - Route路由触发方式
- python mp4 切片_FFmpeg MP4视频切片成TS m3u8播放 好文收集
- 变频器按启动没反应_起重机软启动柜晶闸管损坏维修几大故障
- 为MongoDB定制Spring Social Connect框架
- 洛谷 P1272 重建道路
- 【POJ】2296 Map Labeler
- springboot缓存注解——@Cacheable和@CacheConfig
- 加密狗厂商及工作原理介绍
- hd620显卡驱动 linux,英特尔为Windows 10 推出新显卡驱动 26.20.100.7870
- 国外优秀的屏幕录象专家
- 午夜分享女人的绝对隐私
- android mjpg格式,Camera常用格式MJPEG和jpeg-turbo库
- 温度报警器c语言课程设计,综合电子设计课程设计实验报告-可调温度报警器.doc...
- mac(苹果)电脑有网,浏览器上不了网了,打开不了网页,但是微信、QQ正常使用,如何解决?
- 孩子小学总喜欢用计算机做数学,数学到底该怎样学?真实用!
- 折腾了好久 ORA-00904: : 无效的标识符
热门文章
- 牛客竞赛-NC13230
- MPI 归约操作简介
- xutils断点续传_xUtils3的简单介绍
- 论文阅读:RoadMap: A Light-Weight Semantic Map for Visual Localizationtowards Autonomous Driving轻量语义自动驾驶
- Android中apk加固完善篇之内存加载dex方案实现原理(不落地方式加载)
- 【机器学习】 逻辑回归原理及代码
- 一些MIPS指令的解释
- 医疗机器人软件中的机器人机器人编程技术:机器人技术的创新应用
- .NETCore MVC上传图片
- c语言eof的头文件,vc eof函数是在哪个头文件里面