C# 中如何使用Thread
线程是进程中的最小执行单元,多线程是指在给定时间内拥有多个线程的能力,并且可以调度它们从而在某一时刻处理多个操作,微软的 .net framework
提供了 thread 来帮助我们完成多线程开发。
thread 编程
要想使用 thread,需要在程序中引用 system.threading 命名空间,然后再提供一个供线程调度的方法,这个方法是通过 thread 中的 threadstart 委托代理的,下面的代码展示了如何创建线程。
线程创建好之后,还需要调用 start 方法去启动,下面的代码展示了如何去实现,哦,对了,上面的 mythreadmethod
方法会在新的线程上被调度,而不是调用线程。
展示线程状态
一个创建好的线程,它的生命周期内会有多个状态,比如:aborted, background, running, stopped, suspended, unstarted 等等,这些状态在 thread 中是用 threadstate
枚举表示的,如下代码所示:
当一个 thread 对象创建好之后,它的状态就是 unstarted
,然而当 start 方法启动之后,线程的状态将会从 unstarted
切换到 running
状态,下面的代码展示了这种轮转。
控制线程的 前台和后台
一个线程要么是前台线程要么是后台线程,如果你是通过显式的方式创建线程,它便是前台线程,前后线程最大的区别在于:应用程序退出的前提必须是程序内的所有前台线程都得到退出,相反,应用程序的退出不依赖于后台线程。
你可以通过 isbackground 属性来设置 thread 的前台或者后台,下面的代码展示了如何去实现。
除了启动线程,还可以通过 suspend() 和 resume() 方法来 挂起 和 恢复 线程, 值得注意的是,你只能 恢复 你之前通过 suspend 方法 挂起的线程,如下代码所示:
值得注意的是,现在的 thread.suspend()
和 thread.resume()
方法都是被标记成弃用的状态了,取而代之的做法是:使用 autoresetevent
和 eventwaithandle
方法来实现多线程之间的同步。
设置线程优先级
可以给一个线程赋予优先级,从而和内存中的其他线程争抢 cpu 时间,在 c# 中是使用 threadpriority 枚举来表示,大体上有如下值: lowest, belownormal, normal, abovenormal 和 highest,下面的代码展示了如何给这两个线程赋予优先级。
从上面的输出结果中可以看出,thread1 先于 thread2 执行完,即使 thread2.start 是先启动的,是不是很好的演示了优先级的概念。
线程是昂贵的,因为线程的整个生命周期需要消耗太多的资源,比如:初始化,上下文切换,释放使用的资源 等等,所以在用 多线程 之前需要想好是否真的要这么做,当用多线程
的时候,适当的使用 线程池 (threadpool)
是一个非常好的做法,毕竟线程池内部会帮你自动创建,释放,调度线程,你只需要傻傻的用即可,同时也是提升程序响应的利器。
译文链接:
以上就是c# 中如何使用thread的详细内容,更多关于c# 使用 thread的资料请关注其它相关文章!
下一篇: 护肝的果蔬汁都有哪些,一起来看看
推荐阅读
-
C#多线程之Thread中Thread.Join()函数用法分析
-
C#中尾递归的使用、优化及编译器优化
-
小程序开发中如何使用async-await并封装公共异步请求的方法
-
php中如何同时使用session和cookie来保存用户登录信息
-
python中如何正确使用正则表达式的详细模式(Verbose mode expression)
-
pycharm 使用心得(八)如何调用另一文件中的函数
-
c#在程序中定义和使用自定义事件方法总结
-
C#动态加载组件后如何在开发环境中调试详解
-
C#中BitConverter.ToUInt16()和BitConverter.ToString()的简单使用
-
C#中Equals和GetHashCode使用及区别