热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

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

转自:http:tech.ddvip.com2008-11122595602689670.html在了解了线程的各种状态之后,我们来看一下线程控制的一些方法,如下表:是否

转自: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 方法有两种不同的用法:

'放弃线程的执行

 '通过指定一个 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


    对比一下,仅仅加了一条语句,却使代码性能大大提升。当然,这个例子不过是冰山一角。 下一节,我们将会了解线程同步。

推荐阅读
  • 本文介绍了一个在线急等问题解决方法,即如何统计数据库中某个字段下的所有数据,并将结果显示在文本框里。作者提到了自己是一个菜鸟,希望能够得到帮助。作者使用的是ACCESS数据库,并且给出了一个例子,希望得到的结果是560。作者还提到自己已经尝试了使用"select sum(字段2) from 表名"的语句,得到的结果是650,但不知道如何得到560。希望能够得到解决方案。 ... [详细]
  • SpringMVC接收请求参数的方式总结
    本文总结了在SpringMVC开发中处理控制器参数的各种方式,包括处理使用@RequestParam注解的参数、MultipartFile类型参数和Simple类型参数的RequestParamMethodArgumentResolver,处理@RequestBody注解的参数的RequestResponseBodyMethodProcessor,以及PathVariableMapMethodArgumentResol等子类。 ... [详细]
  • 单页面应用 VS 多页面应用的区别和适用场景
    本文主要介绍了单页面应用(SPA)和多页面应用(MPA)的区别和适用场景。单页面应用只有一个主页面,所有内容都包含在主页面中,页面切换快但需要做相关的调优;多页面应用有多个独立的页面,每个页面都要加载相关资源,页面切换慢但适用于对SEO要求较高的应用。文章还提到了两者在资源加载、过渡动画、路由模式和数据传递方面的差异。 ... [详细]
  • 如何优化Webpack打包后的代码分割
    本文介绍了如何通过优化Webpack的代码分割来减小打包后的文件大小。主要包括拆分业务逻辑代码和引入第三方包的代码、配置Webpack插件、异步代码的处理、代码分割重命名、配置vendors和cacheGroups等方面的内容。通过合理配置和优化,可以有效减小打包后的文件大小,提高应用的加载速度。 ... [详细]
  • loader资源模块加载器webpack资源模块加载webpack内部(内部loader)默认只会处理javascript文件,也就是说它会把打包过程中所有遇到的 ... [详细]
  • asp中如何嵌入python的简单介绍
    本文目录一览:1、如何在IIS中执行Python脚本 ... [详细]
  • 使用nodejs爬取b站番剧数据,计算最佳追番推荐
    本文介绍了如何使用nodejs爬取b站番剧数据,并通过计算得出最佳追番推荐。通过调用相关接口获取番剧数据和评分数据,以及使用相应的算法进行计算。该方法可以帮助用户找到适合自己的番剧进行观看。 ... [详细]
  • 本文介绍了使用AJAX的POST请求实现数据修改功能的方法。通过ajax-post技术,可以实现在输入某个id后,通过ajax技术调用post.jsp修改具有该id记录的姓名的值。文章还提到了AJAX的概念和作用,以及使用async参数和open()方法的注意事项。同时强调了不推荐使用async=false的情况,并解释了JavaScript等待服务器响应的机制。 ... [详细]
  • android listview OnItemClickListener失效原因
    最近在做listview时发现OnItemClickListener失效的问题,经过查找发现是因为button的原因。不仅listitem中存在button会影响OnItemClickListener事件的失效,还会导致单击后listview每个item的背景改变,使得item中的所有有关焦点的事件都失效。本文给出了一个范例来说明这种情况,并提供了解决方法。 ... [详细]
  • [大整数乘法] java代码实现
    本文介绍了使用java代码实现大整数乘法的过程,同时也涉及到大整数加法和大整数减法的计算方法。通过分治算法来提高计算效率,并对算法的时间复杂度进行了研究。详细代码实现请参考文章链接。 ... [详细]
  • 本文介绍了使用cacti监控mssql 2005运行资源情况的操作步骤,包括安装必要的工具和驱动,测试mssql的连接,配置监控脚本等。通过php连接mssql来获取SQL 2005性能计算器的值,实现对mssql的监控。详细的操作步骤和代码请参考附件。 ... [详细]
  • 模板引擎StringTemplate的使用方法和特点
    本文介绍了模板引擎StringTemplate的使用方法和特点,包括强制Model和View的分离、Lazy-Evaluation、Recursive enable等。同时,还介绍了StringTemplate语法中的属性和普通字符的使用方法,并提供了向模板填充属性的示例代码。 ... [详细]
  • 本文讨论了编写可保护的代码的重要性,包括提高代码的可读性、可调试性和直观性。同时介绍了优化代码的方法,如代码格式化、解释函数和提炼函数等。还提到了一些常见的坏代码味道,如不规范的命名、重复代码、过长的函数和参数列表等。最后,介绍了如何处理数据泥团和进行函数重构,以提高代码质量和可维护性。 ... [详细]
  • 本文介绍了禅道作为一款国产开源免费的测试管理工具的特点和功能,并提供了禅道的搭建和调试方法。禅道是一款B/S结构的项目管理工具,可以实现组织管理、后台管理、产品管理、项目管理和测试管理等功能。同时,本文还介绍了其他软件测试相关工具,如功能自动化工具和性能自动化工具,以及白盒测试工具的使用。通过本文的阅读,读者可以了解禅道的基本使用方法和优势,从而更好地进行测试管理工作。 ... [详细]
  • 从批量eml文件中提取附件的Python代码实现方法
    本文介绍了使用Python代码从批量eml文件中提取附件的实现方法,包括获取eml附件信息、递归文件夹下所有文件、创建目的文件夹等步骤。通过该方法可以方便地提取eml文件中的附件,并保存到指定的文件夹中。 ... [详细]
author-avatar
mobiledu2502887833
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有