高分求救:多线程调用队列的值
我想用多线程(5-10)个线程调用一个队列(先进先出)的值,一个线程完毕后,自动调用下一个队列里的值。
有没有示例?求救!本人是vb.net菜鸟,希望尽量详细 最好有代码可用
[解决办法]
- VB.NET code
Imports System.Collections.GenericImports System.ThreadingImports System.Runtime.CompilerServicesModule Module1 Dim q As Queue(Of Integer) Sub Main() q = New Queue(Of Integer) For i As Integer = 1 To 1000 q.Enqueue(i) Next Dim threadArr(10) As Thread For i As Integer = 0 To threadArr.Length - 1 threadArr(i) = New Thread(AddressOf Print) Next For i As Integer = 0 To threadArr.Length - 1 threadArr(i).Start() Next Console.ReadLine() End Sub Sub Print() Dim temp As Integer While q.Count > 0 SyncLock q If q.Count > 0 Then temp = q.Dequeue() End If End SyncLock Console.WriteLine(temp.ToString()) End While End SubEnd Module
[解决办法]
Module Module1
Dim q As Queue(Of Integer) '定义一个整型集合
Sub Main()
q = New Queue(Of Integer)‘实例化集合
For i As Integer = 1 To 1000 ’将1000个数值添加到集合q
q.Enqueue(i)
Next
Dim threadArr(10) As Thread '定义11个线程
For i As Integer = 0 To threadArr.Length - 1 '实例化线程
threadArr(i) = New Thread(AddressOf Print) '线程执行过程 "Print "
Next
For i As Integer = 0 To threadArr.Length - 1
threadArr(i).Start() '启动线程
Next
Console.ReadLine()’读行?不知道什么意义
End Sub
Sub Print()’用来给线程执行的过程。
Dim temp As Integer
While q.Count > 0 '如果集合q含有数值
'监视集合q,在 SyncLock 代码区域内只允许一个线程执行,其他线程会被挂起直到前一个线程运行到End SyncLock之后。可以避免线程调用冲突。
SyncLock q
If q.Count > 0 Then
temp = q.Dequeue() '取出数值
End If
End SyncLock
Console.WriteLine(temp.ToString()) '将数值写到输出窗口
End While
End Sub
End Module