我的程序采用多线程入库,在入库过程中需要对同一个状态字进行修改,以判断入库情况,以后读取这个状态字即可知道哪 个需要入库,哪个不需要。经过多次的试验,对这个状态字的修改总是出问题,很多时候状态字就没有更新,估计可能是多线程在同时读写那个字段时,导致的脏数据,请问这种现象如何解决。

解决方案 »

  1.   


    用 for update 行锁锁住你要的那些行?
      

  2.   


    多线程不是很清楚,就数据库写入这块做下说明: 当对一个表进行修改时,数据库内存会采用排他锁的机制,这时表只能有由一个用户来进行写操作。 这个按楼主的意思,应该是楼主的一个线程来进行,也就是说,在同一时刻,对表只能由一个线程来进行写入。 所以在写入这块采用多线程意义不大.------------------------------------------------------------------------------ 
    Blog: http://blog.csdn.net/tianlesoftware 
    网上资源: http://tianlesoftware.download.csdn.net 
    相关视频:http://blog.csdn.net/tianlesoftware/archive/2009/11/27/4886500.aspx 
    Q Q 群:62697716 
      

  3.   

    oracle多想成不明白,以后还待深入学习!
      

  4.   

    for update也是不管用的,就是当多个线程同时读取了一个时刻的状态字,而其中一个线程快速把它给更改了, 第二个线程又要在原来读取的基础上再改,导致前一个进程改写的状态丢失,带来错误;还有就是一个线程在改,锁定了某行,而其它线程在等待,超时后退出,状态字还是未得到完全更改,同样带来错误。
    实在没法了。
      

  5.   

    建议lz另外加个表tblstatus,表里有个字段flag 0 为可以操作,1为不可以操作
    每个线程在操作表之前查看tblstatus 的flag状态。如果为1的话马上flag状态更改了。然后再操作你要修改的表。表修改完再将tblstatus表中flag的状态改为0。
      

  6.   

    不知道楼主的问题最后怎么解决的,我现在也遇到oracle多线程编程的问题了,我的qq希望能请教一下你