【发布时间】:2016-08-16 13:59:51
【问题描述】:
我有一些块语句从数据库中获取数据递增它的值并在数据库中再次更新,如果触发 5 个请求它工作正常但如果我在几秒钟内触发请求数(考虑 10)(考虑 10到 15 秒)我在 10 个请求中得到 2 到 3 个请求的相同值。什么是解决方案,以便我可以获得每个请求的下一个值?我已经尝试过同步块,但它不起作用......!
【问题讨论】:
标签: java synchronization
我有一些块语句从数据库中获取数据递增它的值并在数据库中再次更新,如果触发 5 个请求它工作正常但如果我在几秒钟内触发请求数(考虑 10)(考虑 10到 15 秒)我在 10 个请求中得到 2 到 3 个请求的相同值。什么是解决方案,以便我可以获得每个请求的下一个值?我已经尝试过同步块,但它不起作用......!
【问题讨论】:
标签: java synchronization
尝试序列。
大多数数据库系统都支持序列。序列的主要目的是为您提供增量和唯一值。
在 Oracle 数据库中,您可以查询 sql:
CREATE SEQUENCE mysequnece;
SELECT mysequnece.nextval FROM dual;
【讨论】:
您可以在更新将是原子的数据库级别增加值。 例如
UPDATE mytable
SET logins = logins + 1
WHERE id = 12
那么你就不需要在代码中同步块了。
有关数据库级别值增量的更多信息,请参阅this answer
【讨论】: