我寫了一個多線程的爬行程序,該過程只是簡單地創建線程並讓它們訪問要爬行的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