然而,过了一段时间服务器崩了(相信这是大部分菜鸟程序员都会发生的事情,有自信的代码居然会出现bug,啊啊啊泪奔怪自己年轻,对吧),关于那条数据的模块都显示不出数据,我赶快看了一下日志发现数据库中报了错,...冷静下来想一想,应该是多条请求在同一时刻内发过来的,它们同时判断出数据库当中没有数据,然后同时插入了进去,噢,原来是这个样子,那么这个问题该如何解决呢?...想象一下,现在有个用户对一个按钮狂按,那么我们就对这个操作加锁
加锁的思路是这样的:当一条请求过来的时候,我们就做一个标识,标识当前用户的某一条请求正在被处理,当这个用户的其他请求进来的时候,看到有标识就对这些请求弃之不顾...Thread.currentThread().getId());
try {
synchronized (this) { //这里一定要用同步,同步里面的操作都是对缓存的存储...remove掉,因为afterRun方法是任何请求(包括不同用户的请求)结束都会调用,
//所以这也是runningTokenValue这样设计的原因,保证是同一个用户的其中一个请求