多个线程同时去一个表中取数据,如何控制同一条数据不被2个线程取到?

SkidRow133 2012-03-09 07:36:08
有多个线程同时在一张表中取数据,表中有个字段记录着该条数据是否已被取过,如果被取过就不再去取。
在并发的时候,如何防止不被2个线程同时取?
如果用synchronized时,那对该表的访问是不是只能是单线程了?
...全文
408 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
jiangfullll 2012-03-15
  • 打赏
  • 举报
回复
我觉得应该是给表字段加锁,乐观悲观你需要自己斟酌
结贴是美德 2012-03-15
  • 打赏
  • 举报
回复
只取不改貌似不用做事务了吧。。

要是一定要加锁 那就悲观或者乐观锁吧
rogerwang0618 2012-03-15
  • 打赏
  • 举报
回复
数据库好像有自己的锁,这种情况应该不会发生吧!!
aleyn 2012-03-15
  • 打赏
  • 举报
回复
阿木木_ 2012-03-11
  • 打赏
  • 举报
回复
菜鸟路过 看看线程问题 帮顶
MiceRice 2012-03-09
  • 打赏
  • 举报
回复
◎ 在并发的时候,如何防止不被2个线程同时取?
—— 基本上主要靠在数据库端做手脚,否则集群环境下无法保证。
—— 做法基本上是捆绑两句话在一个事务中,第一句Select...For Update,第二句修改作为标志的字段。

◎ 如果用synchronized时,那对该表的访问是不是只能是单线程了?
—— 不能说是单线程,应该说是串行化访问。Select .... For Update 也可以实现类似于串行化访问的效果。
iGoodLoser 2012-03-09
  • 打赏
  • 举报
回复
如果不需要修改写入没必要同步吧,不是很理解楼主的问题!
synchronized作用是在某一时刻只允许一个线程访问同步方法或块。并非就是单线程了!
engourdi 2012-03-09
  • 打赏
  • 举报
回复
存与取貌似都只能单线程吧,还是坐等大牛解释一下

81,092

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧