Java中如何实施多种时间控制策略?
- 内容介绍
- 文章标签
- 相关推荐
本文共计2243个文字,预计阅读时间需要9分钟。
前言:最近小明同学又遇到了一个需求:线上业务运行了一段时间后,随着使用人数增多,发现了一个问题,就是订单会重复创建几次,导致数据库里出现了很多垃圾数据。
前言:最近小王同学又遇到了一个需求:线上的业务运行了一段时间,后来随着使用人数增多,出现了一个问题是这样的,一个订单会重复创建几次,导致数据库里出现了很多垃圾数据。在测试同学的不断测试下,发现问题出在了前端的一个提交按钮上,有的用户比较“着急”,提交订单时候,一下子快速的点了5、6次(这手速没有几年是练不出来的,咳咳),导致请求一下子都涌进来,后端进行了重复处理。项目经理让小王优化这个点,绝对不能创建多次。还有一个需求是这样的,在与第三方对接过程中,对方提供了token进行时效性验证,过一段时间token就会失效.后台有定时任务在获取,但是偶尔会出现token失效,这是因为在获取的时候,定时任务正在跑,可能正在获取最新的token中,这个时候如何过一段时间(比如800毫秒之后)再请求呢?小王仰望天空45度,思考起来了。。。
一:时间控制的几种方案
1.1: 从线程方面解决
最简单粗暴的一种实现方案:Thread.sleep(800),但是很快就被小王给pass掉了。为什么呢?虽然这种方式可以,但是存在一个隐患,如果在多线程环境下,线程很容易被interrupt,这样代码就会抛出异常,这样线程就会挂起,导致整个线程异常结束。实在是不够优雅,违背了我们设计的初衷。
1.2:使用Timer
查阅了jdk,我发现有个实现定时的类,使用它是可以的,在jdk中提供了定时器类,这个类的主要作用就是控制一定的时间来简单的定时执行某个任务。有点简单的elasticJob的设计味道。
本文共计2243个文字,预计阅读时间需要9分钟。
前言:最近小明同学又遇到了一个需求:线上业务运行了一段时间后,随着使用人数增多,发现了一个问题,就是订单会重复创建几次,导致数据库里出现了很多垃圾数据。
前言:最近小王同学又遇到了一个需求:线上的业务运行了一段时间,后来随着使用人数增多,出现了一个问题是这样的,一个订单会重复创建几次,导致数据库里出现了很多垃圾数据。在测试同学的不断测试下,发现问题出在了前端的一个提交按钮上,有的用户比较“着急”,提交订单时候,一下子快速的点了5、6次(这手速没有几年是练不出来的,咳咳),导致请求一下子都涌进来,后端进行了重复处理。项目经理让小王优化这个点,绝对不能创建多次。还有一个需求是这样的,在与第三方对接过程中,对方提供了token进行时效性验证,过一段时间token就会失效.后台有定时任务在获取,但是偶尔会出现token失效,这是因为在获取的时候,定时任务正在跑,可能正在获取最新的token中,这个时候如何过一段时间(比如800毫秒之后)再请求呢?小王仰望天空45度,思考起来了。。。
一:时间控制的几种方案
1.1: 从线程方面解决
最简单粗暴的一种实现方案:Thread.sleep(800),但是很快就被小王给pass掉了。为什么呢?虽然这种方式可以,但是存在一个隐患,如果在多线程环境下,线程很容易被interrupt,这样代码就会抛出异常,这样线程就会挂起,导致整个线程异常结束。实在是不够优雅,违背了我们设计的初衷。
1.2:使用Timer
查阅了jdk,我发现有个实现定时的类,使用它是可以的,在jdk中提供了定时器类,这个类的主要作用就是控制一定的时间来简单的定时执行某个任务。有点简单的elasticJob的设计味道。

