免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 6816 | 回复: 11
打印 上一主题 下一主题

一个关于JAVA操作数据库锁的问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2005-08-15 15:12 |只看该作者 |倒序浏览
请问一下如何实现以下功能
我有一张表table
里面有很多条记录,我要写一个程序,实现如下功能,启动N个线程来查询此数据库
第一个进程如果得到了第一条记录,则第二个进程不能再取第一条记录,往下查询符合条件的记录,请问如何实现此功能,得于的数据库中的记录在一个线程运行后可能会被删除,继续去查没有被其它线程得到的记录

论坛徽章:
0
2 [报告]
发表于 2005-08-16 14:17 |只看该作者

一个关于JAVA操作数据库锁的问题

使用select * from tablename for update 记录锁就可以了,这样保证只有一个线程能够访问到这一条纪录

论坛徽章:
0
3 [报告]
发表于 2005-08-16 21:57 |只看该作者

一个关于JAVA操作数据库锁的问题

能不能详细介绍一下这个记录锁,偶页想学习一下

论坛徽章:
0
4 [报告]
发表于 2005-08-17 10:02 |只看该作者

一个关于JAVA操作数据库锁的问题

这个锁是记录锁,就是锁住你查询的纪录,如果别人在查询这条纪录的时候是查询不到,别人只能等待你使用结束后才能查询和使用到。在你的两个线程中查询时都使用这个锁就可以达到你要的效果。

论坛徽章:
0
5 [报告]
发表于 2005-08-18 09:23 |只看该作者

一个关于JAVA操作数据库锁的问题

需要对这条记录进行释放吗?什么时候才算使用结束

论坛徽章:
0
6 [报告]
发表于 2005-08-18 09:51 |只看该作者

一个关于JAVA操作数据库锁的问题

完全没有必要这么做,select for update是行锁,如果应用不当,或者程序出现exception,会引起比较严重的阻塞锁。你完全可以一次性把所有这样符合记录的数据查询出来,然后逐条处理。典型的做法是用一个存储过程,定义符合这样条件记录的游标,然后逐条处理这些游标记录,最后用java调用这个存储过程就ok了。你的这个表中记录比较多,所以你想到了多线程,启动多个线程查询一张表,性能不一定就高,况且不断使用锁,更会严重影响性能,问题的瓶颈不在这里。

论坛徽章:
0
7 [报告]
发表于 2005-08-18 11:12 |只看该作者

一个关于JAVA操作数据库锁的问题

[quote]原帖由 "极品忧郁猫"]完全没有必要这么做,select for update是行锁,如果应用不当,或者程序出现exception,会引起比较严重的阻塞锁。你完全可以一次性把所有这样符合记录的数据查询出来,然后逐条处理。典型的做法是用一个存储过程,定..........[/quote 发表:

如果多个线程调用这个存贮过程,这个存贮过程要不要加锁,要不然还会出现楼主所说的问题阿

论坛徽章:
0
8 [报告]
发表于 2005-08-18 13:28 |只看该作者

一个关于JAVA操作数据库锁的问题

原帖由 "大马虎" 发表:

如果多个线程调用这个存贮过程,这个存贮过程要不要加锁,要不然还会出现楼主所说的问题阿


不要搞多线程,使用存储过程,一次性把所有(注意,是所有的,而不是用多线程逐条处理,这只会降低效率)符合条件的记录处理了。java只调用一次存储过程。

论坛徽章:
0
9 [报告]
发表于 2005-08-18 14:13 |只看该作者

一个关于JAVA操作数据库锁的问题

原帖由 "极品忧郁猫" 发表:


不要搞多线程,使用存储过程,一次性把所有(注意,是所有的,而不是用多线程逐条处理,这只会降低效率)符合条件的记录处理了。java只调用一次存储过程。


这个回答文不对题,楼主的要求是并行处理,为什么改为单线程,而且有什么理由肯定多线程效率不高?

论坛徽章:
0
10 [报告]
发表于 2005-08-18 15:06 |只看该作者

一个关于JAVA操作数据库锁的问题

原帖由 "tinywind" 发表:


这个回答文不对题,楼主的要求是并行处理,为什么改为单线程,而且有什么理由肯定多线程效率不高?


经常遇到这样的情况,动辄表中记录数千万,这个情况下,即使使用了索引,查询效率也不是很高,再加上多线程,更别提了,一般集中处理。尽量减少多次查询。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP