【发布时间】:2018-08-16 09:39:24
【问题描述】:
我有以下读取和写入数据库的方法。它检查用户数是否小于 MAX_USERS,然后添加一个新用户。
addUser(User user){
//count number of users in the DB, SELECT count(*) from user_table
count = ...
if(count<MAX_USERS){
//add the new user to the DB, INSERT INTO users_table
}
}
这里的问题是,如果上面的代码被多个线程调用,那么它们可能会得到相同的计数值。这将导致 users_table 中的条目超过 MAX_USERS 个。
一种解决方案是同步整个方法,但这会影响性能。有没有更好的处理方法?
【问题讨论】:
-
@Andreas 如果您有答案,请使用原子/锁定事务,随时发布。
-
请记住,“影响性能”并不意味着它“以显着方式影响性能”。
标签: java database multithreading postgresql concurrency