社区
Oracle
帖子详情
oracle多线程读写同一字段的问题,结果总是出错
zxgllp
2009-12-06 05:10:54
我的程序采用多线程入库,在入库过程中需要对同一个状态字进行修改,以判断入库情况,以后读取这个状态字即可知道哪 个需要入库,哪个不需要。经过多次的试验,对这个状态字的修改总是出问题,很多时候状态字就没有更新,估计可能是多线程在同时读写那个字段时,导致的脏数据,请问这种现象如何解决。
...全文
206
12
打赏
收藏
oracle多线程读写同一字段的问题,结果总是出错
我的程序采用多线程入库,在入库过程中需要对同一个状态字进行修改,以判断入库情况,以后读取这个状态字即可知道哪 个需要入库,哪个不需要。经过多次的试验,对这个状态字的修改总是出问题,很多时候状态字就没有更新,估计可能是多线程在同时读写那个字段时,导致的脏数据,请问这种现象如何解决。
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
12 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
海飏
2010-05-29
打赏
举报
回复
晕,刚才忘写联系方式了,qq:596782369
海飏
2010-05-29
打赏
举报
回复
不知道楼主的问题最后怎么解决的,我现在也遇到oracle多线程编程的问题了,我的qq希望能请教一下你
zxgllp
2009-12-22
打赏
举报
回复
那不操作的时候线程是等待还是放弃呢?需要人工控制等待或放弃还是会导致状态不能及时更新,而且可能会阻碍后面的线程工作
zxgllp
2009-12-10
打赏
举报
回复
for update也是不管用的,就是当多个线程同时读取了一个时刻的状态字,而其中一个线程快速把它给更改了, 第二个线程又要在原来读取的基础上再改,导致前一个进程改写的状态丢失,带来错误;还有就是一个线程在改,锁定了某行,而其它线程在等待,超时后退出,状态字还是未得到完全更改,同样带来错误。
实在没法了。
zxgllp
2009-12-10
打赏
举报
回复
我是多线程的入库,入库完后去读写那个状态字而产生的碰撞现象,这个真的是无法解决了,估计数据库本身的排队在等待超时后其它线程都退出了,那个状态字的更新也就不准了,现在只能求尽可能的避开同时操作一个字段的机会,没有办法了,把超时改大了点也不管用。
Rachel
2009-12-10
打赏
举报
回复
建议lz另外加个表tblstatus,表里有个字段flag 0 为可以操作,1为不可以操作
每个线程在操作表之前查看tblstatus 的flag状态。如果为1的话马上flag状态更改了。然后再操作你要修改的表。表修改完再将tblstatus表中flag的状态改为0。
huangyunzeng2008
2009-12-08
打赏
举报
回复
oracle多想成不明白,以后还待深入学习!
zxj828282
2009-12-08
打赏
举报
回复
董很多了
ycscsjj
2009-12-06
打赏
举报
回复
多线程不是很清楚,就数据库写入这块做下说明: 当对一个表进行修改时,数据库内存会采用排他锁的机制,这时表只能有由一个用户来进行写操作。 这个按楼主的意思,应该是楼主的一个线程来进行,也就是说,在同一时刻,对表只能由一个线程来进行写入。 所以在写入这块采用多线程意义不大.
Dave
2009-12-06
打赏
举报
回复
[Quote=引用楼主 zxgllp 的回复:]
我的程序采用多线程入库,在入库过程中需要对同一个状态字进行修改,以判断入库情况,以后读取这个状态字即可知道哪 个需要入库,哪个不需要。经过多次的试验,对这个状态字的修改总是出问题,很多时候状态字就没有更新,估计可能是多线程在同时读写那个字段时,导致的脏数据,请问这种现象如何解决。
[/Quote]
多线程不是很清楚,就数据库写入这块做下说明: 当对一个表进行修改时,数据库内存会采用排他锁的机制,这时表只能有由一个用户来进行写操作。 这个按楼主的意思,应该是楼主的一个线程来进行,也就是说,在同一时刻,对表只能由一个线程来进行写入。 所以在写入这块采用多线程意义不大.
------------------------------------------------------------------------------
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
crazylaa
2009-12-06
打赏
举报
回复
[Quote=引用楼主 zxgllp 的回复:]
我的程序采用多线程入库,在入库过程中需要对同一个状态字进行修改,以判断入库情况,以后读取这个状态字即可知道哪 个需要入库,哪个不需要。经过多次的试验,对这个状态字的修改总是出问题,很多时候状态字就没有更新,估计可能是多线程在同时读写那个字段时,导致的脏数据,请问这种现象如何解决。
[/Quote]
用 for update 行锁锁住你要的那些行?
kaylg
2009-12-06
打赏
举报
回复
等待正解
面试宝典已回答篇.pdf
5. **
Oracle
联合主键**:创建联合主键时,应确保主键
字段
的唯一性和非空性,注意
字段
类型和排序规则,避免因数据冲突导致的
问题
。 6. **分布式理解**:分布式是指将大规模计算任务分解为小部分,分配给多台计算机...
JAVA学习教程
第7章讲解了Java的
多线程
特性,这是Java的一个强大功能。
多线程
允许程序同时执行多个任务,提高应用程序的效率。Java提供了Thread类和Runnable接口来创建和管理线程。 6. **输入输出流与文件操作**: Java的I/O流...
并发编程
多线程
在
多线程
中有多种方法让线程按特定顺序执行,你可以用线程类的join()方法在一个线程中启动另一个线程,另外一个线程完成该线程继续执行。 代码举例: 为了确保三个线程的顺序你应该先启动最后一个(T3 调用T2,T2...
Qt/C++源码/数据库组件/
多线程
读写
/自动重连/数据清理/数据上传/数据库翻页导航/自定义委托
同时支持多种数据库比如odbc、sqlite、mysql、postgresql、sqlserver、
oracle
、人大金仓等。 一个数据库类即可管理本地数据库通信,也支持远程数据库通信等。 数据库线程支持执行各种sql语句,包括单条和批量。 组件...
JAVA的
多线程
及并发
线程安全就是说
多线程
访问
同一
代码,不会产生不确定的结果。在
多线程
环境中,当各线程不共享数据的时候,即都是私有(private)成员,那么一定是线程安全的。但这种情况并不多 ,在多数情况下需要共享数据,这时就...
Oracle
17,137
社区成员
55,258
社区内容
发帖
与我相关
我的任务
Oracle
Oracle开发相关技术讨论
复制链接
扫一扫
分享
社区描述
Oracle开发相关技术讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章