多线程读数据库

来源:百度知道 编辑:UC知道 时间:2024/05/22 03:34:21
我想用一个线程不断插入数据,另一个线程不断读取新插入的数据,我怎么才能做到线程监视新插入的数据呢?还有怎么做到多线程插入数据,如果有代码,用java写一个例子,非常感激各位
我的需求很简单,我想从数据库读出url网页地址,读取过的不能再读,然后抓取网页源码,抓取完然后再存回去,url记录大约有十万,我的思路是开一个线程,读过的再把它一个字段如isReaded修改为1,再开几个线程去抓取,问题是怎么一边读一边更新呢,一下读进十万,再更新是不是很占cpu和内存,另外还有线程往里面不定时插入数据,这样怎么做才好呢

我写了个多线程读取数据的,你看看下面的代码
http://hi.baidu.com/jacobi19871112/blog/item/427cd62a103b16315343c1fa.html

启动2个线程
一个用来插入数据
另一个要监视,监视线程可以考虑这么来实现 :每隔一段时间来对数据库进行检索,获得更新的部分数据,可以通过SQL语言实现。
当然这个办法比较笨
效率不好
如果你对数据库足够了解
应当知道里面有触发器机制
对插入数据建立一个触发器
每次的数据插入就会引发一个触发器事件
这时候再来对数据库中的数据进行检索

或者你可以自定义一个监听器 Listener
对数据进行监听

使用quartz直接使用计划任务去监控数据库的变化。
quartz是支持多线程的,只要注意检索语句,避免出现数据库的锁,就能完成你的需要。

数据库的读写已经做的很好了,如果你想提高效率,可以考虑mysql 的 master-slave 模式