Status: solved
我必须制作一个粘贴箱,因为我必须指出行号。
注意:不使用 executorsService 或线程池。只是为了了解以这种方式启动和使用线程有什么问题。如果我使用 1 个线程。该应用程序运行完美!
相关链接:
http://www.postgresql.org/docs/9.1/static/transaction-iso.html http://www.postgresql.org/docs/current/static/explicit-locking.html
main app,
http://pastebin.com/i9rVyari,http://pastebin.com/2c4pU1K8,http://pastebin.com/2S3301gD
logs
_ _ _ _
我在实例化一个runnable
类的for循环中启动了许多线程(10),但似乎我得到了相同的结果db
(我从db中得到一些字符串,然后改变它)但是each thread, I get same string
(尽管每个线程都改变了它。)。使用 可能是什么常见的问题jdbc
?postgresql
line 252
and line 223
该链接被标记为processed. (true)
在 db 中。其他线程crawler class
也这样做。所以什么时候line 252
应该得到一个链接。它应该是processed = false
。但我看到了threads take same link.
当其中一个线程爬取链接时。它使它处理= true。其他人则不应抓取它。(得到它)是它的标记处理=真。
getNonProcessedLinkFromDB()
返回未处理的链接
public String getNonProcessedLink(){ line 645
public boolean markLinkAsProcesed(String link){ line 705
getNonProcessedLinkFromDB
将查看已处理 = false 链接并从中提供一个。 limit 1
每个线程的起始间隔为 20 秒。
在一个线程内。1 或 2 秒(估计抓取的处理时间)
line 98 keepS threads from grabbing the same url
如果你看到结果。一个线程使它成为现实。还有其他人访问它。过了一段时间。
所有线程都是分开的。甚至一个races
。db在第一个线程处理它的那一刻使链接为真