-
vb.net 教程 6-5 多线程 基本概念
版权声明:本文为博主原创文章,转载请在显著位置标明本文出处以及作者网名,未经作者允许不得用于商业目的。
关于多线程,我个人的理解:
1、关于多线程
windows系统上的程序运行时必须要有一个进程,而每个进程至少有一个线程。每个程序都开始于一个单独的线程,通常被称为主线程。
举个例子理解多线程:
一个关于猫科动物的研究报告,需要观测猫、老虎、狮子、豹子,
张三一个人把所有内容写完,那么在程序中可以将研究报告项目看作程序,做这个研究工作看成进程,张三干的相当于一个线程,也就是个单线程任务;
现在有李四负责完成猫和老虎的研究工作,王五负责完成狮子、豹子的研究工作,张三在研究中起到总领全局的作用,那么张三相当于是主线程,李四、王五相当于其他的线程,这几个线程可以同时进行工作,大大提高了工作效率。
要深入理解多线程,还得学习cpu时间片相关知识,cpu的运行时间被划分为了很多很小的时间片,分配给每个线程的时间都很短,看上去所有线程都是同时运行。
2、多线程的优点:
提高了系统对用户的响应,
提高CPU的利用率
大家可以尝试使用以下代码,将会发现当按下按钮时,拖动不了窗体,直到代码计算完结果。
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
Dim sum As Int64
For i As Int64 = 1 To 1000000000
sum += i
Next
TextBox1.Text = sum.ToString
End Sub
3、多线程的缺点:
线程也要占用cpu和内存资源,同时用的线程越多,资源占用越大
太多的线程需要更多的管理和协调,否则造成线程死锁和程序崩溃
同时启用多个线程时,线程启动的先后顺序是不受控制的
4、何时用多线程?
执行占用大量时间的操作时(比如网络数据读写,有可能会因为带宽小而很慢),同时需要UI界面不“死机”
如果理解了以上信息,你确定你的程序中需要多线程,那么我们继续学习。
.net代码主要使用了Thread类对线程进行操作,在使用时,需要引用System.Threading命名空间:
Imports System.Threading
Thread类常用属性:
IsAlive:获取指示当前线程的执行状态的值。
IsBackground:获取或设置某个线程是否为后台线程。
ManagedThreadId:获取当前托管线程的唯一标识符。
Name:线程的名称。
Priority:线程的调度优先级的值。通常情况下,系统可以自动调整线程的优先级。包含如下值:
Highest:最高
AboveNormal:高于Normal
Normal:正常级别
BelowNormal:低于Normal
Lowest:最低
ThreadState:获取当前线程的状态。包含如下状态:
Aborted:线程状态包括 AbortRequested 并且该线程现在已死,但其状态尚未更改为 Stopped。
AbortRequested:已对线程调用了 Thread.Abort 方法,但线程尚未收到试图终止它的挂起的 System.Threading.ThreadAbortException。
Background:线程正作为后台线程执行(相对于前台线程而言)。 此状态可以通过设置 Thread.IsBackground 属性来控制。
Running:线程已启动,它未被阻塞,并且没有挂起的 ThreadAbortException。
Stopped:线程已停止。
StopRequested:正在请求线程停止。 这仅用于内部。
Suspended:线程已挂起。
SuspendRequested:正在请求线程挂起。
Unstarted:尚未对线程调用 Thread.Start 方法。
WaitSleepJoin:线程已被阻止。
Thread类常用方法:
Start:启动该线程,导致操作系统将当前实例的状态更改为 ThreadState.Running。
Abort:在调用此方法的线程上引发 ThreadAbortException,以开始终止此线程的过程。 调用此方法通常会终止线程,需要注意的是,Abort是在到达一个安全点后才被终止。
Join:阻止调用线程直到线程终止,可以理解为其余线程等待这个线程运行完。
Sleep:将当前线程挂起指定的毫秒数。
通常情况下,使用多线程用以下方法
先是实例化一个Thread类对象
然后使用Start 方法启动线程
由于.net平台下C#和vb.NET很相似,本文也可以为C#爱好者提供参考。
学习更多vb.net知识,请参看vb.net 教程 目录
————————————————
版权声明:本文为CSDN博主「VB.Net」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/UruseiBest/article/details/87891911
最新更新
求1000阶乘的结果末尾有多少个0
详解MyBatis延迟加载是如何实现的
IDEA 控制台中文乱码4种解决方案
SpringBoot中版本兼容性处理的实现示例
Spring的IOC解决程序耦合的实现
详解Spring多数据源如何切换
Java报错:UnsupportedOperationException in Col
使用Spring Batch实现批处理任务的详细教程
java中怎么将多个音频文件拼接合成一个
SpringBoot整合ES多个精确值查询 terms功能实
数据库审计与智能监控:从日志分析到异
SQL Server 中的数据类型隐式转换问题
SQL Server中T-SQL 数据类型转换详解
sqlserver 数据类型转换小实验
SQL Server数据类型转换方法
SQL Server 2017无法连接到服务器的问题解决
SQLServer地址搜索性能优化
Sql Server查询性能优化之不可小觑的书签查
SQL Server数据库的高性能优化经验总结
SQL SERVER性能优化综述(很好的总结,不要错
uniapp/H5 获取手机桌面壁纸 (静态壁纸)
[前端] DNS解析与优化
为什么在js中需要添加addEventListener()?
JS模块化系统
js通过Object.defineProperty() 定义和控制对象
这是目前我见过最好的跨域解决方案!
减少回流与重绘
减少回流与重绘
如何使用KrpanoToolJS在浏览器切图
performance.now() 与 Date.now() 对比