我写了一个多线程的爬行程序,该过程只是简单地创建线程并让它们访问要爬行的URL列表。然后他们访问网址并解析html内容。所有这些似乎工作正常。现在,当我需要写入数据库中的表格时,我遇到了问题。我有2个声明的数组列表将包含每个线程解析的内容。第一个arraylist只是rss供稿链接,另一个arraylist包含不同的帖子。 然后,我使用每个循环迭代一个,同时顺序递增另一个并写入数据库。 我的问题是,每次有新线程访问其中一个列表时,内容都会发生变化,这会影响迭代。我试过使用嵌套循环,但它没有工作之前,这工作正常使用单线程。我希望这是有道理的。这里是我的代码:多线程问题
SyncLock dlock
For Each l As String In links
finallinks.Add(l)
Next
End SyncLock
SyncLock dlock
For Each p As String In posts
finalposts.Add(p)
Next
End SyncLock
...
Dim i As Integer = 0
SyncLock dlock
For Each rsslink As String In finallinks
postlink = finalposts.Item(i)
i = i + 1
finallinks和finalposts是两个arraylist。我不包括代码的其余部分,显示线程工作,但是这是在发生我的错误基本上是在这里
postlink = finalposts.Item(i)
i = i + 1
ERROR: index was out of range. Must be non-negative and less than the size of the collection
是否有其他的重要组成部分?
好吧我现在觉得很蠢,谢谢你的回应。这很好地使用单线程,但我怎么能锁定finallinks和finalposts将它们写入到一个表中,而复制到finallinks和finalposts的列表由线程使用,并且出于性能原因不锁定。这有意义吗?你有另一种方式我应该这样做吗? – vbNewbie 2010-03-18 15:26:44
有没有人可以提供帮助? – vbNewbie 2010-03-18 15:49:08
您的请求变得复杂。阅读一些关于多线程的文章,然后你会自己解决。 – Andrey 2010-03-18 15:51:37