线程池本身是不是其实并非多线程,只是起个防止cpu占用太高的作用?--关于多线程,不明白一些概念,新手求教
1.比如我把work过程放到线程池ThreadPool.QueueUserWorkItem(New WaitCallback(AddressOf work), Nothing).我这个work里面是很长的一个循环.那这个work过程执行的时候是不是自动多线程地进行呢?还是说是单线程地进行?
我试了一下,我如果不把work放到线程池,那程序是会假死的.放到线程池以后就不会假死了.但是速度并不会快,甚至感觉好像慢了.所以我觉得它其实是单线程运行的,线程池只不过起个防止cpu占用太高的作用?
2.另外请教个多线程的概念问题:
1)"多线程"其实是"多任务"的意思是吗?就是说使用了多线程以后,我一个程序里或者同一个过程里都可以"同时"执行很多个任务(也就是说不用等a任务结束再来进行b任务)?其实多少有点相当于运行多个程序?
2)正因为上面这一点,如果两个线程执行的任务需要用到同一个变量,那就会出错是吗?多个线程执行的任务所使用的变量是不能重叠的? 比如如果两个线程执行的任务都需要临时性地把数据输出到textbox1,而两个线程又是同时进行的,那textbox1中的数据就会错乱是吗?
我曾经试了个在多个线程里都把数据输出到同一个文本文件,发现会报错说"文件在使用中".
比如下面这样:
Imports SystemImports System.ThreadingPublic Class AClass Dim filename As String = "r:\test.txt" Public Sub Method1() Dim i As Integer For i = 1 To 10 Dim file As New System.IO.StreamWriter(filename, True) '如果是r:\test.txt 要怎么写? "r:\test.txt" file.WriteLine("这是类AClass方法method1的内容" + i) 'Text) file.Close() 'Console.WriteLine("这是类AClass方法method1的内容", i) Next End Sub Public Sub Method2() Dim i As Integer For i = 1 To 10 Dim file As New System.IO.StreamWriter(filename, True) '如果是r:\test.txt 要怎么写? "r:\test.txt" file.WriteLine("这是类AClass方法method2的内容" + i) 'Text) file.Close() 'Console.WriteLine("这是类AClass方法method2的内容", i) Next End SubEnd ClassPublic Class ThreadTest Public Shared Sub Main() '在Main()方法中,我们创建了类Thread的实例。 Dim obj As New AClass Dim th1, th2 As Thread th1 = New Thread(New ThreadStart(AddressOf obj.Method1)) th1.Start() th2 = New Thread(New ThreadStart(AddressOf obj.Method2)) th2.Start() Dim filename As String = "r:\test.txt" Dim i As Integer For i = 1 To 10 Dim file As New System.IO.StreamWriter(filename, True) '如果是r:\test.txt 要怎么写? "r:\test.txt" file.WriteLine("这是Main方法里的内容" + i) 'Text) file.Close() ' Console.WriteLine("Main方法里的内容", i) Next End SubEnd Class