Sam*_*Sam 3 java database multithreading
在采访中,我得到了这个问题.
场景:在数据库表中,有针对公共资源的条目.让我们说列名称"令牌".总共有500个令牌.一个Web应用程序正在使用此令牌表.因此,每当一个用户点击Web应用程序URL时,就会将一个令牌分配给该用户.一旦将令牌分配给用户,其他用户就无法使用它.因此对于另一个用户,如果令牌显示已经采用,则系统将尝试分配另一个令牌,依此类推.
问题:现在在给定的时间点,让我们说600个用户点击网络应用程序,如何确保只有500个用户将获得令牌,其余100个将不会.
谢谢.
您需要做的是检查请求启动时是否有空闲令牌,如果有空闲令牌则获取令牌,并在工作完成时释放令牌.由于问题是关于数据库的,我认为它暗示了如何实现检查的原子性并采取:使用事务.
例如,您可以拥有包含500行代码的表,其中的过程可以从数据库中选择一个免费令牌,如果有,则更新其行以将其标记为已采用.此过程将在事务中运行.如果它没有可用的免费令牌结束,则服务线程将等待并在短时间后再次尝试.释放令牌再次是对行的简单更新.
另一种选择是从空表开始并通过插入新行来获取令牌.同样,必须在事务中运行检查<= 500行并插入新行以确保原子性.
| 归档时间: |
|
| 查看次数: |
198 次 |
| 最近记录: |