您好,欢迎来到99网。
搜索
您的当前位置:首页VB.NET中多线程程序开发之线程控制

VB.NET中多线程程序开发之线程控制

来源:99网
VB.NET中多线程程序开发之线程控制

 

在了解了线程的各种状态之后,我们来看⼀下线程控制的⼀些⽅法,如下表:

是否需要实例化 ⽅法 说明

是 Start 使线程开始执⾏

是 Suspend 当线程到达⼀个安全点时暂停线程 是 Abort 当线程到达⼀个安全点时停⽌线程 是 Resume 恢复⼀个被挂起的线程 是 Join 等待⼀个线程结束

是 Interrupt 中断⼀个处于 WaitSleepJoin 状态的线程 否 Sleep 在指定的时间内暂停调⽤线程

否 SpinWait 通过空转来延迟线程的执⾏,在此过程中,线程仍然在执⾏,这好⽐创建了⼀个不断运⾏直到计数器⽤完为⽌的循环⼀样。

上表中,安全点是指代码中 CLR 可以安全执⾏⾃动垃圾回收的位置。    下⾯我们来对Sleep 和 Join 给予额外的说明: 1、 Thread.Sleep 当线程处于 Running 状态时,它可以调⽤ Sleep ⽅法。    Sleep ⽅法有两种不同的⽤法:'放弃线程的执⾏

 '通过指定⼀个 Integer 类型的数值作为时间参数(毫秒) '或TimeSpan(类型的参数) 使当前线程 '进⼊ WaitJoinSleep 状态 Thread.Sleep(1000)

Thread.Sleep( New TimeSpan(0, 0, 0, 0, 100)) '放弃线程的执⾏

'不要使当前线程进⼊ WaitJoinSleep 状态 '把时间⽚让给其它线程

'通过指定参数 0 或 TimeSpan.Zero Thread.Sleep(0)

Thread.Sleep(TimeSpan.Zero) 2、 Thread.Join

Join ⽅法是我们可以使⽤的最简单的同步构造,在⼀个线程上调⽤ Join ⽅法时,调⽤线程会进⼊ WaitJoinSleep 状态,⽽且将⼀直保持到被调⽤的线程已经结束,这将允许线程阻塞执⾏,挂起到系统中其它线程的完成。请看如下⽰例: Sub Main()

Dim thd1 As New Thread( AddressOf Sub1)   Dim thd2 As New Thread( AddressOf Sub2)   thd1.Start()   thd2.Start()

  '等待上⾯两个线程结束   thd1.Join()  thd2.Join()

  '这时,可以保证两个线程都已经结束 End Sub

现在我们对线程的控制⽅法已经明⽩了,那么我们如何将这些知识应⽤到实践中呢?我们可能都遇到过这种情况: Private Done As Boolean = False

  Public Sub Begin()   While Not Done    End While

 Console.WriteLine( \"Done, OK!\" ) End Sub

这种做法,可能你我以前都⽤过,很明显,它会给系统带来⾮常沉重的负担。现在,我们可以利⽤ Thread.Sleep ⽅法来改善上述状况: Private Done As Boolean = False Public Sub Begin()    While Not Done

      Thread.Sleep(1000)    End While

Console.WriteLine( \"Done, OK!\" ) End Sub

    对⽐⼀下,仅仅加了⼀条语句,却使代码性能⼤⼤提升。当然,这个例⼦不过是冰⼭⼀⾓。 下⼀节,我们将会了解线程同步。

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- 99spj.com 版权所有 湘ICP备2022005869号-5

违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务