A1...A10共10线程,这个10个线程从数据库中取出数据给下面的b1-b15用B1...B15共15个线程,这15线程从A1..A10线程获取要处理的数据,处理后,再更新到数据库
现在的问题是:a系列线程,有可能取到重复的数据,当b还没来得及更新到库中是地,a系列线程又取了
怎么才能解决这问题
用数据库本身事务没法解决这情况

解决方案 »

  1.   

    生产者 -> 仓库 -> 消费者其中仓库只有一个。如果你看不懂,那么你就当我啥都没说。
      

  2.   

    当然后B在更新的时候
    就把A所要用到的所有的读取数据库中数据的方法锁上不如用个变量标记如果没有办法判断B中的操作是否都完成了那么这是个无解的错误设计
      

  3.   

    A1...A10共10线程,这个10个线程从数据库中取出数据给下面的b1-b15用
    我想问一下,必须用10个线程从库里拿么?
    是从一张表还是从10张不同的表?抑或是每个线程都使用不同的条件?

    B1...B15共15个线程,这15线程从A1..A10线程获取要处理的数据,处理后,再更新到数据库
    还是要问一下,你确定是B系列线程是从A系列线程处获取数据,而不是A系列线程申请B系列线程,并将数据给B
    现在的问题是:a系列线程,有可能取到重复的数据,当b还没来得及更新到库中是地,a系列线程又取了
    就事论事的话,一个比较简单的办法:在a取数据的表里增加updatetime字段,
    a取数据的时候总是记住本次取走的数据的updatetime,最新值,然后下次取的时候,在sql中增加updatetime>lastMaxUpdateTime判断
    b更新的时候修改updatetime
    俺还是更感兴趣你要干什么,如果能把需求说说,也许可以考虑其它优化手段。
      

  4.   

    增加一个字段updated,0表示还没被更新,1表示已经更新,刚开始全部是1
    读线程只读updated=1的记录,然后讲updated更新为0
    写线程只更新那些updated=0的记录
    同时注意处理好并发的问题
    LX的顺便说说这个是生产者消费者问题还是读者写者问题(感觉更像读者写者问题),OS学得实在是不咋的
      

  5.   

    用一个队列存放a线程取出的数据,存放前判断,如果队列已存在该数据,则不放
    b线程从队列中取出数据处理
    队列用同步控制,当队列为空时,b等待,当队列满时a等待
    a存入一个数据则唤醒b,b取出一个数据则唤醒a
    可以用现成的Queue,a,b也可以用线程池
      

  6.   


    A线程就是取数据
    B线程就是更新数据数据似乎没有冲突!检查A与B在一个进程中是否可以并行!查看读线程与写线程变量集合。
    R(A)∩W(B)∪ R(B)∩W(A)∪ W(A)∩W(B)={}
      

  7.   

    要控制仓库里的值没有重复,要学习java 间的通信把  wait();notify();
      是这样吗??
      

  8.   

    对取出的数据加标记,用wait();notify();