多线程应用方法(上)

多线程应用方法(上)

一、进程及线程

线程与进程区别,一个应用程序必须有一个进程,但是可线程的数量却无法确定,没有线程也可能,更多使用线程也是可能的。

进程是以线程为基础。进程用来管理线程,并分配线程工作机制。

采用多线不是使软件工作得更快,而是让软件工作得更灵敏。

VB.NET开发多线程,变得很轻松。操作更方便,管理更容易。

 

二、线程基本用法

 定义一个类 ,首先要引用

Imports System.Threading

 Public Class ClsTest

     Public Sub Test()

         Console.WriteLine("正在执行的主线程 {0})", _

   Thread.CurrentThread.Name)

         Console.Write("打印数字: ")

    For i As Integer = 0 To 10

              Console.Write(i & ", ")

              Thread.Sleep(2000)

          Next

       Console.WriteLine()

  End Sub

End Class

2.1 单线程运行

  Module Module1

     Sub main

       Dim p as new clstest

       p.test

End sub

  End module

此程序只有主线程在运行

2.2、两个线程运行。

  Module Module1

     Sub main

     Dim MainThread as thread = Thread.currentThread

     mainThread.Name =”First”

     Console.writeline(“当前正在执行的主线程:Thread.currentThread.name)

 

   Dim SecondThread  as  thread = New Thread(addressof  p.Exe)

     SecondThread.name=”secondary”

     secondThread.start

 

     messagebox.show(“系统正在运行中…”)

     end  sub

  End module

 

  这个程序启动了两个线程,主线程和SecondThread线程;并且是同步工作方式(不是绝对同步工作);

2.3、多线程应用

在使用多线程访问一个类的函数成员时,必须要考虑函数执行的完整性,防止多线程访问的冲突,主要采用加线程锁。threadLock …./End Synclock

Public Class Printer

当前执行的线程:{0}", _

      Thread.CurrentThread.Name)

      Console.Write("打印数字: ")

      For i As Integer = 0 To 10

          Dim r As Random = New Random()

          Thread.Sleep(100 * r.Next(10))     异步线程测试")

    Dim p As clstest = New clstest()

    Dim threads(10) As Thread    定义11个线程

    For i As Integer = 0 To 10

      threads(i) = New Thread(AddressOf p.PrintNumbers)       ‘指向相同的函数方法

      threads(i).Name = String.Format("正在工作线程号:{0}", i)

      threads(i).start

    Next

    End Sub

End Module

运行后可以看到,几乎是同时打印所有的工作;

 

三、带参数线程基本用法

  .NET3.5对线程带参数的开发趋于更加完善。我们在开发过程中可以很好使用带参数的线程。

Class  clsTest

  Public  mvarA As Integer

  Public  mvarB As Integer

  Public Sub New(ByVal p1 As Integer, ByVal p2 As Integer)

    mvarA = p1

    mvarB = p2

  End Sub

 

Public overides functon ToString as string

   Console.writeline(mavra.tostring & mvarB.toString)

End function

End Class

在主模块中进行运行测试

Module Program

  Sub Main(ByVal args As String())

    Console.WriteLine("***** 带参数线程测试*****")

    Console.WriteLine("主线程号: {0}", Thread.CurrentThread.ManagedThreadId)

    Dim ap As clsTest = New clsTest (10, 10)

    Dim t As Thread = New Thread(AddressOf Add)

    t.Start(ap)

    Console.ReadLine()

  End Sub

 

  Public Sub Add(ByVal data As Object)

    If TypeOf data Is clsTest Then                ‘判断参数类型

      Console.WriteLine("ID of thread in Add(): {0}", Thread.CurrentThread.ManagedThreadId)

      Dim ap As clsTest = CType(data, clsTest)   ‘进行强制转换

      Console.WriteLine("{0} + {1} is {2}", ap.a, ap.b, ap.a + ap.b)

    End If

  End Sub

End Module

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值