| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> Java知识库 -> C# 多线程 -> 正文阅读 |
|
[Java知识库]C# 多线程 |
目录 1、线程的挂起、恢复
2、线程的启动与终止
? 3、注意事项(1)Suspend()与Abort()方法不一定立即起作用。 对于Suspend(),.net允许要挂起的线程再执行几个指令,目的时为了达到.net认为线程可以安全挂起的状态(是为了确保垃圾收集器执行正确的操作)。 Abort()中止线程,会在受影响的线程中产生一个ThreadAbortException异常,以这种方式中止线程。?如果线程当前执行try块中的代码,则在线程正在中止前,将执行相应的finally块。这样就可以保证清理资源,并有机会确保线程正在处理的数据处于有效状态。? .net使用的异常机制使线程中的中止更加安全,但中止需要一定的时间(理论上,异常块中处理的代码执行多长时间是没有限制的)。因此,在中止线程后需要等待一段时间,线程完全中止后,才能继续执行其他操作。 若后续的处理依赖于该中止的线程,可使用Join()方法,等待线程中止。? (2)Join()
Join()的其他重载方法可以指定等待的时间期限。 若过了等待时间期限,调用代码会继续执行; 若没有指定时间期限,线程就要等待需要等待的时间。 4、线程的状态及优先级Thread.ThreadState,代表线程运行的状态。 ThreadPriority,代表线程的优先级 5、线程间通信(1)关键字locklock可以将一段代码定义为互斥段。互斥段在一个时刻只允许一个线程进入执行,而其他线程必须等待。 避免lock public类型或lock不受应用程序控制的对象实例。
expression代表希望跟踪的对象,通常是对象引用。 通常保护一个类的实例,可以使用this; 保护一个静态变量,使用类名就可以了。 (2)线程监视器多线程公用一个对象时,可使用System.Threading.Monitor类 System.Threading.Monitor提供了是线程共享资源的方案。 System.Threading.Monitor可以锁定一个对象,一个线程只有得到这把锁才能对给对象进行操作。一个时刻只有一个线程可以访问这个对象。 System.Threading.Monitor必须和一个具体的对象关联。
lock就是用System.Threading.Monitor实现的,lock等效于try-finally语句块。 使用lock比直接使用System.Threading.Monitor更可靠,一方面是因为lock简洁,另一方面是因为lock确保了即使受保护的代码发生异常,也可以释放基础监视器。 (3)线程间通信互斥:当有多个线程访问共享资源而不使资源被破坏; 同步:当一个线程需要将某个任务已经完成的情况通知另外一个或多个线程;
(4)子线程访问主线程的控件不同的线程在不同的内存空间中各自无干扰地运行着。在不做任何处理的情况下,若子线程访问有主线程创建的控件时,会报错。 6、线程池和定时器(1)线程池 (2)定时器 7、互斥对象System.Threading.Mutex,是一个同步基元。 线程使用Muxtex.WaitOne()方法等待System.Threading.Mutex对象被释放,一旦System.Threading.Mutex对象被释放,他就自动拥有这个对象,直到他调用System.Threading.Mutex.ReleaseMutex()方法释放这个对象。而在此此期间,其他想要获取这个System.Threading.Mutex对象的线程只能等待。 说明:尽管System.Threading.Mutex可以用于进程内的线程同步,但是通常使用Monitor。 因为监视器Monitor是专门为.net framework而设计的,因而Monitor可以更好地利用资源。 Mutex类是Window32构造的包装,虽然Mutex功能比Monitor更强大,但Mutex需要的互操作转换更消耗计算资源。 ? |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/23 19:11:44- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |