有多个线程同时在一张表中取数据,表中有个字段记录着该条数据是否已被取过,如果被取过就不再去取。
在并发的时候,如何防止不被2个线程同时取?
如果用synchronized时,那对该表的访问是不是只能是单线程了?

解决方案 »

  1.   

    如果不需要修改写入没必要同步吧,不是很理解楼主的问题!
    synchronized作用是在某一时刻只允许一个线程访问同步方法或块。并非就是单线程了!
      

  2.   

    ◎ 在并发的时候,如何防止不被2个线程同时取?
    —— 基本上主要靠在数据库端做手脚,否则集群环境下无法保证。
    —— 做法基本上是捆绑两句话在一个事务中,第一句Select...For Update,第二句修改作为标志的字段。◎ 如果用synchronized时,那对该表的访问是不是只能是单线程了?
    —— 不能说是单线程,应该说是串行化访问。Select .... For Update 也可以实现类似于串行化访问的效果。