VB.NET中多线程程序开发之线程控制
发布时间:2020-12-16 22:42:45 所属栏目:大数据 来源:网络整理
导读:转自:http://tech.ddvip.com/2008-11/122595602689670.html 在了解了线程的各种状态之后,我们来看一下线程控制的一些方法,如下表: 是否需要实例化 方法 说明 是 Start 使线程开始执行 是 Suspend 当线程到达一个安全点时暂停线程 是 Abort 当线程到达一
转自:http://tech.ddvip.com/2008-11/122595602689670.html
在了解了线程的各种状态之后,我们来看一下线程控制的一些方法,如下表: 是否需要实例化 方法 说明 是 Start 使线程开始执行 是 Suspend 当线程到达一个安全点时暂停线程 是 Abort 当线程到达一个安全点时停止线程 是 Resume 恢复一个被挂起的线程 是 Join 等待一个线程结束 是 Interrupt 中断一个处于 WaitSleepJoin 状态的线程 否 Sleep 在指定的时间内暂停调用线程 否 SpinWait 通过空转来延迟线程的执行,在此过程中,线程仍然在执行,这好比创建了一个不断运行直到计数器用完为止的循环一样。 上表中,安全点是指代码中 CLR 可以安全执行自动垃圾回收的位置。 下面我们来对Sleep 和 Join 给予额外的说明: 1、 Thread.Sleep 当线程处于 Running 状态时,它可以调用 Sleep 方法。 Sleep 方法有两种不同的用法: '放弃线程的执行 '或TimeSpan(类型的参数) 使当前线程 '进入 WaitJoinSleep 状态 Thread.Sleep(1000) Thread.Sleep( New TimeSpan(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 对比一下,仅仅加了一条语句,却使代码性能大大提升。当然,这个例子不过是冰山一角。 下一节,我们将会了解线程同步。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |