C# 多线程

进程和线程的区别

进程是分配资源的基本单位,而线程是调度的基本单位。一个进程中通常包含若干个线程。

异步委托

在C#中实现线程的一种简单方式是定义一个委托,并异步调用它。
通过BeginInvoke()启动线程
通过EndInvoke()获得返回值
IAsyncResult类型的变量保存线程状态

Thread类

使用Thread类可以创建和控制线程,Thread类的构造函数的参数是一个无参无返回值的委托类型。
通过Start()方法启动线程
通过Join()方法让当前线程睡眠
因为Thread类构造函数是无参,那么要给线程传递数据怎么呢办?
我们需要自定义一个类,将数据传给自定义类,然后实例化,然后将方法传递给Thread类的构造函数。

后台线程和前台线程

只要有一个前台线程在运行,那么应用程序的进程就在运行。
Thread类创建的线程默认是前台线程,可通过修改IsBackground属性修改为后台线程。

线程的优先级
优先级影响线程的调度顺序。
Thread类可设置Priority属性修改线程优先级,Priority属性是一个ThreadPriority枚举定义的一个值。定义的级别有Highest ,AboveNormal,BelowNormal 和 Lowest。

控制线程

  1. 获取线程的状态(Running还是Unstarted,,,),当我们通过调用Thread对象的Start方法,可以创建线程,但是调用了Start方法之后,新线程不是马上进入Running状态,而是出于Unstarted状态,只有当操作系统的线程调度器选择了要运行的线程,这个线程的状态才会修改为Running状态。我们使用Thread.Sleep()方法可以让当前线程休眠进入WaitSleepJoin状态。

  2. 使用Thread对象的Abort()方法可以停止线程。调用这个方法,会在终止要终止的线程中抛出一个ThreadAbortException类型的异常,我们可以try catch这个异常,然后在线程结束前做一些清理的工作。

  3. 如果需要等待线程的结束,可以调用Thread对象的Join方法,表示把Thread加入进来,停止当前线程,并把它设置为WaitSleepJoin状态,直到加入的线程完成为止。

线程池 ThreadPool类

创建线程需要时间。 如果有不同的小任务要完成,就可以事先创建许多线程 , 在应完成这些任务时发出请求。 这个线程数最好在需要更多的线程时增加,在需要释放资源时减少。

任务

在.NET4 新的命名空间System.Threading.Tasks包含了类抽象出了线程功能,在后台使用的ThreadPool进行管理的。任务表示应完成某个单元的工作。这个工作可以在单独的线程中运行,也可以以同步方式启动一个任务。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值