Imports System
Imports System.Threading
Imports System.Diagnostics
Imports System.Diagnostics.ThreadStateModule Module1Sub Main()Dim mythread1 As ThreadDim mythread2 As ThreadDim mythread3 As Thread'创建线程对象mythread1 = New Thread(AddressOf mythreadrun)mythread2 = New Thread(AddressOf mythreadrun)mythread3 = New Thread(AddressOf mythreadrun)mythread1.Name = "thread_1"mythread2.Name = "thread_2"mythread3.Name = "thread_3"'设置优先级mythread1.Priority = ThreadPriority.Lowestmythread2.Priority = ThreadPriority.Highestmythread3.Priority = ThreadPriority.NormalConsole.WriteLine(Now.ToLongTimeString & "线程对象创建完毕,开始执行线程")'执行线程mythread1.Start()mythread2.Start()mythread3.Start()'等待线程完成mythread1.Join()mythread2.Join()mythread3.Join()'线程执行完毕Console.WriteLine(Now.ToLongTimeString & "线程执行完毕!")End SubPublic Sub mythreadrun()Dim mynum As Integer'分配一个新的槽,这个槽存放线程本地数据,槽名称为'myjg,名称必须唯一Dim jg As LocalDataStoreSlotjg = Thread.GetNamedDataSlot("myjg")Thread.SetData(jg, 100)TryFor mynum = 1 To 30Thread.SetData(jg, Thread.GetData(jg) - mynum)Console.WriteLine(Thread.CurrentThread.Name & "==>" & Now.ToLongTimeString & "=>" & (Thread.GetData(jg) + mynum) & "-" & mynum & ",计算结果为:" & Thread.GetData(jg))Thread.Sleep(50)NextCatchConsole.WriteLine(Thread.CurrentThread.Name & "  " & Now.ToLongTimeString & "线程异常终止!")'终止线程Thread.CurrentThread.Abort()FinallyConsole.WriteLine(Thread.CurrentThread.Name & "  " & Now.ToLongTimeString & "线程运行完毕!")Console.WriteLine(Thread.CurrentThread.Name & "  " & Thread.CurrentThread.Priority.ToString)Thread.FreeNamedDataSlot("myjg")End TryEnd Sub
End Module

线程优先级的设置方法有以下几种

1)如上面代码所示设置优先级
mythread1.Priority = ThreadPriority.Lowest
mythread2.Priority = ThreadPriority.Highest
mythread3.Priority = ThreadPriority.Normal
这种方式 使CLR做一些额外的簿记工作,以便当线程返回线程池时优先级比Normal更高时,通过这些簿记信息来

恢复优先级。
ThreadPriority枚举值有以下几种

Lowest 可以将 Thread 安排在具有任何其他优先级的线程之后。
BelowNormal 可以将 Thread 安排在具有 Normal 优先级的线程之后,在具有 Lowest 优先级的线程之前。
Normal 可以将 Thread 安排在具有 AboveNormal 优先级的线程之后,在具有 BelowNormal 优先级的线程之前。 默认情况下,线程具有 Normal 优先级。
AboveNormal 可以将 Thread 安排在具有 Highest 优先级的线程之后,在具有 Normal 优先级的线程之前。
Highest 可以将 Thread 安排在具有任何其他优先级的线程之前。

ThreadPriority 定义一组线程优先级的所有可能值。 线程优先级指定一个线程相对于另一个线程的相对优先级。

每个线程都有一个分配的优先级。 在运行时内创建的线程最初被分配 Normal 优先级,而在运行时外创建的线程在进入运行时时将保留其先前的优先级。 可以通过访问线程的 Priority 属性来获取和设置其优先级。

根据线程的优先级调度线程的执行。 用于确定线程执行顺序的调度算法随操作系统的不同而不同。 操作系统也可以在用户界面的焦点在前台和后台之间移动时动态地调整线程的优先级。

2)通过System.Diagnostics.ProcessThread来设置优先级,它能设置比第1种方法更多的优先级

Idle 指定空闲优先级。 它是所有线程的可能的最低优先级值,与关联的 ProcessPriorityClass 的值无关。
Lowest 指定最低优先级。 这比关联的 ProcessPriorityClass 的普通优先级低两级。
BelowNormal 指定的优先级比关联的 ProcessPriorityClass 的普通优先级低一级。
Normal 指定关联的 ProcessPriorityClass 的普通优先级。
AboveNormal 指定的优先级比关联的 ProcessPriorityClass 的普通优先级高一级。
Highest 指定最高优先级。 这比关联的 ProcessPriorityClass 的普通优先级高两级。
TimeCritical 指定时间关键优先级。 这是所有线程中的最高优先级,与关联的 ProcessPriorityClass 的值无关

Dim myprocess As Process = Process.GetCurrentProcess()
Dim value As ProcessThreadCollection
Dim pt As ProcessThread
value = myprocess.Threads
For Each pt In valuept.PriorityLevel = ThreadPriorityLevel.AboveNormal
Next

此外,还可以设置线程动态优先级调整的开关

ProcessThread.PriorityBoostEnabled

当 PriorityBoostEnabled 为 true 时,只要关联的进程离开等待状态,系统便暂时提升该线程的优先级。 此操作可防止其他进程中断当前线程的处理。 PriorityBoostEnabled 设置影响所有现有线程及该进程随后创建的所有线程。 若要还原正常行为,请将 PriorityBoostEnabled 属性设置为 false。

仅当线程运行在一个将 PriorityClass 设置为动态优先级枚举值之一(Normal、High 或 RealTime)时,PriorityBoostEnabled 才有效。

4、睡眠与阻塞
Sleep(Int32)将当前线程挂起指定的时间。
注意参数为线程被阻塞的毫秒数

Imports System.ThreadingClass ExampleShared Sub Main()For i As Integer = 0 To 4Console.WriteLine("Sleep for 2 seconds.")Thread.Sleep(2000)NextConsole.WriteLine("Main thread exits.")End Sub
End Class

Sleep(TimeSpan)将当前线程阻塞指定的时间。

下面是关于msdn的阻塞的例子

Imports System.ThreadingClass ExampleShared Sub Main()Dim interval As New TimeSpan(0, 0, 2)For i As Integer = 0 To 4Console.WriteLine("Sleep for 2 seconds.")Thread.Sleep(interval)NextConsole.WriteLine("Main thread exits.")End Sub
End Classmythread1.Start(myprocess)mythread2.Start(myprocess)mythread3.Start(myprocess)mythread1.Suspend()mythread2.Suspend()mythread3.Suspend()mythread1.Resume()mythread2.Resume()mythread3.Resume()

vb.net2019-多线程并行计算(6)相关推荐

  1. python doc2 —— MPI多线程并行计算工具mpi4py

    MPI多线程并行计算工具mpi4py 1. MPI 2. 基本MPI函数 2.1 工具 a. 通信子(通信空间) b. 获取进程 3. 通信 3.1 点对点通信 3.2 群体通信 a. 广播 bcas ...

  2. vb.net2019-多线程并行计算(4)

    三.栈内存 1.每个WINDOWS都有一个栈基址和栈限址,二者合在一起表示栈的有效内存范围.栈限址不是固定的,程序需要更多内存空间里,栈限址没有超过保留的栈内存范围,则可以要求更多的内存页 2.在栈限 ...

  3. vb.net2019-多线程并行计算(2)

    一.TLS种类 1)动态TLS 2)静态TLS 静态TLS的速度比动态TLS快,在编译期就决定,需要定义一个静态域来表示TLS数据,编译器有足够的信息来在编译期间内发射代码,动态TLS需要通过一个或多 ...

  4. VB无所不能之七:VB的多线程(2)

    云查杀很牛X的金山毒霸!免费啦!2011下载链接! 久违啦,我今天终于又可以写博客了,VB无所不能这个系列写作途中总是磕磕绊绊的,终于写到第七篇多线程的时候,中断了长达1个多月的时间没有更新新帖,对大 ...

  5. vb.net2019-多线程并行计算(1)

    Imports System Imports System.ThreadingModule Module1Sub Main()Dim mythread1 As ThreadDim mythread2 ...

  6. linux 多线程并行计算,Linux下使用POSIX Thread作多核多线程并行计算

    POSIX线程库根据处理器.操作系统等特性封装了一台线程处理的接口.对于目前基于x86处理器架构的Linux系统来说,它往往会默认地将新创建的一个线程调度到与主线程不同的核中执行,如果这样能更好地平衡 ...

  7. vb.net2019-多线程并行计算(5)

    一.线程状态涉及的CLR类 1)Process 类 提供对本地和远程进程的访问并使您能够启动和停止本地系统进程 GetCurrentProcess 获取新的 Process 组件并将其与当前活动的进程 ...

  8. vb.net2019-多线程并行计算(3)

    接上节,我们可以使用下面语句创建一个线程本地变量,利用静态TLS功能 Dim betterCounter As ThreadLocal(Of Integer) = New ThreadLocal(Of ...

  9. linux 多线程并行计算,浅谈.NET下的多线程和并行计算(五)线程池基础上

    池(Pool)是一个很常见的提高性能的方式.比如线程池连接池等,之所以有这些池是因为线程和数据库连接的创建和关闭是一种比较昂贵的行为.对于这种昂贵的资源我们往往会考虑在一个池容器中放置一些资源,在用的 ...

最新文章

  1. ibm db2获取目标时间与当前时间的差值_高帧频视觉实时目标检测系统
  2. 黑白球JAVA_桶中取黑白球 - jiacut的个人页面 - OSCHINA - 中文开源技术交流社区
  3. 简介QTP中的Active Screen
  4. Python3.x的mysqlclient的安装、Python操作mysql,python连接MySQL数据库,python创建数据库表,带有事务的操作,CRUD
  5. X-003 FriendlyARM tiny4412 uboot移植之添加相应目录文件
  6. 【OpenCV函数】轮廓提取;轮廓绘制;轮廓面积;外接矩形
  7. 用eclipice抓取JS代码
  8. html5图片列表纵向,div css图片列表实例布局案例ul li布局
  9. 2025年全球5G室内无线市值将达5.09亿美元
  10. 为什么你的数据库经常会被破防呢?原因原来是这——Sql注入问题(源码+文字深度解析)
  11. TSC工业型条码打印机的价格的影响因素有哪些呢?
  12. 内置函数dict()字典
  13. SCM供应链管理系统解决方案:实现供应可视化、管理信息化,成本可控化
  14. html如何改变日期样式,html如何修改日期样式
  15. doc 问卷调查模板表_调查问卷模板.doc
  16. matlab与测绘数据处理,MATLAB与测绘数据处理
  17. python三维图旋转_python中的三维图像旋转
  18. 零基础如何快速学习Java?Java基础入门秘诀
  19. 如何让爆满的C盘腾出 10G空间
  20. html制作洋葱皮,洋葱皮作用做漂染复活节彩蛋教程

热门文章

  1. 通过 Java 线程堆栈进行性能瓶颈分析
  2. 配置 yum 源的两种方法
  3. 【模板小程序】求M~N范围内的质数个数
  4. Python chardet 字符编码判断
  5. [poj]poj1860(SPFA)
  6. @Autowired注解警告Field injection is not recommended
  7. 获取的输入内容,没有被P标签包裹的文本和元素进行处理
  8. 【Step1】【SPFA】poj2457-Part Acquisition
  9. 找出一个文件夹下后缀名为.jpg的文件
  10. Java--类的成员