博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C#线程的管理
阅读量:5033 次
发布时间:2019-06-12

本文共 1568 字,大约阅读时间需要 5 分钟。

  启动多线程是构建一个充分利用资源的应用程序的好方式,但在时计适应多线程时你很快就会发现事实上通过函数启动一个线程是不够的,往往我们需要更多的操作来对线程进行管理比如挂起、恢复和终止线程。使用线程时,如何避免资源冲突是关键的操作,这时需要锁定资源,是他只能同时被一个线程使用。

 

1.启动线程和关闭线程

1 static void Main(String [] args) 2 { 3   Thread DoWorkThread =new Thread(new ThreadStart(DoWork)); 4     DoWorkThread.Start(); 5   Thread.Sleep(1000); 6     DoWorkThread.Abort(); 7      8     Console.WriteLine("The Main () thread is ending"); 9     10     THread.Sleep();11 }12 public static void DoWork()13 {14     Console.WriteLine("DoWork is running on another thread!");15     try16     {17         Thread.Sleep(5000);18     }19     catch(ThreadAbortException ex)20     {21         Console.WriteLine("DoWork was aborted!");22     }23     finally24     {25         Console.WriteLine("Use finally to close all open resources.");26     }27     Console.WriteLine("DoWork has ended");28     29 }
View Code

该程序输出如下所示:

DoWork is running on another thread.

DoWork was aborted.

User finally to close all open resources.

The Main() is thread is ended.

 事实上DoWork方法并没有输出"DoWork has ended"这是因为DoWork还在执行Sleep时就被终止了,如果你注释掉Abort方法的话任务将会顺利的完成执行。

2.进程的挂起和继续

  我们可以尝试调用Thread.Suspend和Thread.Resume来挂起和继续线程的执行。然而,这些方法并不是很好。因为这两个方法不依赖于受控线程的协作,也就是说他们的线程安全性将不被保证。他们具有高度的入侵行为,能够导致一些严重的应用程序问题,比如死锁。一个挂起的线程拥有的资源却正是一个正在进行的线程所需要的。与之相反应该使用Monitor来进行线程的挂起和继续,这个我将会在接下来的博文中提到。

3.线程的优先级

  在线程创建了但是还没有启动的时候,我们可以使用ThreadPriority的枚举来设置线程的Thread.Priority属性控制线程的优先级。线程的优先级告诉操作系统哪个线程更加的重要,使系统分配给各个线程合理的性能资源。

通常高优先级的线程会先于低优先级的线程完成。优先级从最高到最低的可用选项如下:

Highest

AboveNormal

Normal

BelowNormal

Lowest

转载于:https://www.cnblogs.com/DeckerCHAN/p/3157954.html

你可能感兴趣的文章
网摘正则验证工具(html代码,可本地运行)
查看>>
(转)ssm框架学习入门实例
查看>>
linux字符过滤
查看>>
linux下解压命令大全(转载)
查看>>
20155202 张旭 课下作业: Linux下IPC机制
查看>>
常用正则表达式
查看>>
java十分钟速懂知识点——System类
查看>>
算法:快速排序
查看>>
sed扩展命令使用
查看>>
关于异或
查看>>
抽象类,抽象方法
查看>>
山寨机与国产手机的历史
查看>>
FFMPEG转码后得到的MP4必须要加载完才能播放的问题
查看>>
刷过一题之NOIP2013表达式求值
查看>>
【HNOI2015】菜肴制作
查看>>
javascript继承
查看>>
海思uboot启动流程详细分析(三)【转】
查看>>
.NET之JSON序列化运用
查看>>
一般8位的微型机系统以16位来表示地址,则该计算机系统有几个地址空间
查看>>
sitemesh2.x+velocity+springmvc乱码解决方案
查看>>