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

来源:计算机等级考试    发布时间:2012-08-29    计算机等级考试视频    评论

  在了解了线程的各种状态之后,我们来看一下线程控制的一些方法,如下表:
  
是否需要实例化 方法 说明
Start 使线程开始执行
Suspend当线程到达一个安全点时暂停线程
Abort当线程到达一个安全点时停止线程
Resume 恢复一个被挂起的线程
Join等待一个线程结束
?/td> 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
  对比一下,仅仅加了一条语句,却使代码性能大大提升。当然,这个例子不过是冰山一角。 下一节,我们将会了解线程同步。
2009年NCRE考试有新变化
2009年全国计算机等级考试大纲
2009年上半年全国计算机等级考试报名信息汇总

视频学习

我考网版权与免责声明

① 凡本网注明稿件来源为"原创"的所有文字、图片和音视频稿件,版权均属本网所有。任何媒体、网站或个人转载、链接转贴或以其他方式复制发表时必须注明"稿件来源:我考网",违者本网将依法追究责任;

② 本网部分稿件来源于网络,任何单位或个人认为我考网发布的内容可能涉嫌侵犯其合法权益,应该及时向我考网书面反馈,并提供身份证明、权属证明及详细侵权情况证明,我考网在收到上述法律文件后,将会尽快移除被控侵权内容。

最近更新

社区交流

考试问答