VB.NET中,多线程的学习笔记(一)

2024-02-26 09:48:12 浏览数 (2)

一、多线程有什么优点

1.提高响应性:在单个进程中创建多个线程可以使得应用程序在执行耗时任务(如网络通信、文件I/O或大量计算)的同时保持用户界面的响应,从而改善用户体验。

2.资源利用率:现代计算机通常拥有多个处理器核心。通过多线程,应用程序可以利用这些硬件资源并行处理任务,提高了整体性能和CPU使用率。

3.并发执行:多线程允许程序同时执行多个操作,特别是在涉及多个独立任务或可以分解为并行工作的场景中,能够显著缩短总体执行时间。

4.简化复杂逻辑:对于复杂的系统或大型数据处理任务,将工作分解到多个线程可以使代码结构更清晰,并且更容易管理和维护。

5.异步编程模型:.NET框架提供了诸如BackgroundWorker类、Task类和TPL(任务并行库)等工具,它们简化了多线程编程,并支持事件驱动的异步编程模型,使开发者可以更容易地实现非阻塞UI和异步任务的执行与监控。

6.更好的可扩展性和伸缩性:使用多线程技术编写的应用程序,在面对增加的工作负载时,可以更加容易地分配任务给更多的线程或者处理器,从而实现更好的可扩展性和系统伸缩性。

二、多线程方式之System.Threading

(一)System.Threading

在VB.NET中,System.Threading 命名空间提供了多种与线程相关的类和接口。其中 Thread 类是用于创建和管理线程的主要类,以下是一些主要的属性和方法:

(二)Thread 类的部分属性:

属性

说明

ManagedThreadId

获取当前托管线程的唯一标识符。

Name

设置或获取线程的名称,方便调试时识别。

IsBackground

确定线程是否为后台线程(守护线程)。

Priority

获取或设置线程的优先级。

(三)Thread 类的部分方法:

方法

说明

Start()

启动一个新线程并执行指定的委托(通过构造函数传递给 ThreadStart 或 ParameterizedThreadStart)

Abort()

中断线程的执行(不推荐使用,应尽量避免直接中止线程)

Join()

阻止调用线程直到指定的线程终止

Sleep()

使当前线程暂停执行指定的时间量

实例:

代码语言:javascript复制
Imports System.Threading  
Module Module1  
  Sub Main()  
        ' 创建一个新线程  
       Dim workerThread As New Thread(New ThreadStart(AddressOf DoWork))  
        ' 开始执行线程  
       workerThread.Start()  
        ' 主线程继续执行其他任务  
       Console.WriteLine("主线程正在执行其他任务...")  
        ' 等待工作线程完成  
       workerThread.Join()  
       Console.WriteLine("所有任务完成。")  
       Console.ReadLine()  
End Sub  
    ' 线程要执行的方法  
 Sub DoWork()  
   For i As Integer = 1 To 5  
       Thread.Sleep(500) ' 模拟耗时任务  
      Console.WriteLine("工作线程执行任务: " & i.ToString())  
   Next  
 End Sub  
 End Module

此外,System.Threading 命名空间还包含其他用于处理线程同步、异步编程以及定时任务的类,

例如:

Mutex, Semaphore, Monitor 等用于同步多线程访问共享资源。

AutoResetEvent, ManualResetEvent, EventWaitHandle 作为线程间的信号同步机制。

Interlocked 类提供原子操作,如自增、交换等,确保在多线程环境下的数据一致性。

ThreadPool 类可用于管理和复用线程池中的线程。

Timer 类(如 System.Threading.Timer),用于调度定期或单次回调事件。

请注意,现代.NET框架更倾向于使用 Task 和 Task.Parallel 类(来自 System.Threading.Tasks 命名空间)来进行异步编程和多线程操作,因为它们提供了更高级别的抽象和更好的性能管理功能。

0 人点赞