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在第一个线程处理它的那一刻使链接为真