我是靠谱客的博主 含糊电灯胆,最近开发中收集的这篇文章主要介绍VB.NET并行与分布式编程(5)-线程状态与调整[3] ,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

4、线程优先级

 

Imports System
Imports System.Threading
Imports System.Diagnostics
Imports System.Diagnostics.ThreadState
Module Module1
Sub Main()
Dim mythread1 As Thread
Dim mythread2 As Thread
Dim 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.Lowest
mythread2.Priority = ThreadPriority.Highest
mythread3.Priority = ThreadPriority.Normal
Console.WriteLine(Now.ToLongTimeString & "线程对象创建完毕,开始执行线程")
'执行线程
mythread1.Start()
mythread2.Start()
mythread3.Start()
'等待线程完成
mythread1.Join()
mythread2.Join()
mythread3.Join()
'线程执行完毕
Console.WriteLine(Now.ToLongTimeString & "线程执行完毕!")
End Sub
Public Sub mythreadrun()
Dim mynum As Integer
'分配一个新的槽,这个槽存放线程本地数据,槽名称为
'myjg,名称必须唯一
Dim jg As LocalDataStoreSlot
jg = Thread.GetNamedDataSlot("myjg")
Thread.SetData(jg, 100)
Try
For mynum = 1 To 30
Thread.SetData(jg, Thread.GetData(jg) - mynum)
Console.WriteLine(Thread.CurrentThread.Name & "==>" & Now.ToLongTimeString & "=>" & (Thread.GetData(jg) + mynum) & "-" & mynum & ",计算结果为:" & Thread.GetData(jg))
Thread.Sleep(50)
Next
Catch
Console.WriteLine(Thread.CurrentThread.Name & "
" & Now.ToLongTimeString & "线程异常终止!")
'终止线程
Thread.CurrentThread.Abort()
Finally
Console.WriteLine(Thread.CurrentThread.Name & "
" & Now.ToLongTimeString & "线程运行完毕!")
Console.WriteLine(Thread.CurrentThread.Name & "
" & Thread.CurrentThread.Priority.ToString)
Thread.FreeNamedDataSlot("myjg")
End Try
End 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)

最后

以上就是含糊电灯胆为你收集整理的VB.NET并行与分布式编程(5)-线程状态与调整[3] 的全部内容,希望文章能够帮你解决VB.NET并行与分布式编程(5)-线程状态与调整[3] 所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(79)

评论列表共有 0 条评论

立即
投稿
返回
顶部