C#的多线程机制探索2
下面我们就动手来创建一个线程,使用Thread类创建线程时,只需提供线程入口即可。线程入口使程序知道该让这个线程干什么事,在C#中,线程入口是通过ThreadStart代理(delegate)来提供的,你可以把ThreadStart理解为一个函数指针,指向线程要执行的函数,当调用Thread.Start()方法后,线程就开始执行ThreadStart所代表或者说指向的函数。
打开你的VS.net,新建一个控制台应用程序(Console Application),下面这些代码将让你体味到完全控制一个线程的无穷乐趣!
//ThreadTest.cs
using System; namespace ThreadTest public class Simple Alpha oAlpha = new Alpha(); |
这段程序包含两个类Alpha和Simple,在创建线程oThread时我们用指向Alpha.Beta()方法的初始化了ThreadStart代理(delegate)对象,当我们创建的线程oThread调用oThread.Start()方法启动时,实际上程序运行的是Alpha.Beta()方法:
Alpha oAlpha = new Alpha(); Thread oThread = new Thread(new ThreadStart(oAlpha.Beta)); oThread.Start(); |
然后在Main()函数的while循环中,我们使用静态方法Thread.Sleep()让主线程停了1ms,这段时间CPU转向执行线程oThread。然后我们试图用Thread.Abort()方法终止线程oThread,注意后面的oThread.Join(),Thread.Join()方法使主线程等待,直到oThread线程结束。你可以给Thread.Join()方法指定一个int型的参数作为等待的最长时间。之后,我们试图用Thread.Start()方法重新启动线程oThread,但是显然Abort()方法带来的后果是不可恢复的终止线程,所以最后程序会抛出ThreadStateException异常。
程序最后得到的结果将如下图:
C#的多线程机制探索2相关推荐
- C#的多线程机制探索1
注:本文中出现的代码均在.net Framework RC3环境中运行通过 一.多线程的概念 Windows是一个多任务的系统,如果你使用的是windows 2000及其以上版本,你可以通过任务管理器 ...
- C#的多线程机制探索4
expression代表你希望跟踪的对象,通常是对象引用.一般地,如果你想保护一个类的实例,你可以使用this:如果你希望保护一个静态变量(如互斥代码段在一个静态方法内部),一般使用类名就可以了.而s ...
- [ZT]C#的多线程机制探索(2)
三.线程的同步和通讯--生产者和消费者 假设这样一种情况,两个线程同时维护一个队列,如果一个线程对队列中添加元素,而另外一个线程从队列中取用元素,那么我们称添加元素的线程为生产者,称取用元素的线程 ...
- C#的多线程机制探索7
大家可以看到,在上面的例程中,同步是通过等待Monitor.Pulse()来完成的.首先生产者生产了一个值,而同一时刻消费者处于等待状态,直到收到生产者的"脉冲(Pulse)"通知 ...
- C#的多线程机制探索3
在这里我们要注意的是其它线程都是依附于Main()函数所在的线程的,Main()函数是C#程序的入口,起始线程可以称之为主线程,如果所有的前台线程都停止了,那么主线程可以终止,而所有的后台线程都将无条 ...
- C#的多线程机制探索6
<!-- Please check block file --> 然后在下面这个类MonitorSample的Main()函数中我们要做的就是创建两个线程分别作为生产者和消费者,使用Cel ...
- C#的多线程机制探索5
首先,我们定义一个被操作的对象的类Cell,在这个类里,有两个方法:ReadFromCell()和WriteToCell.消费者线程将调用ReadFromCell()读取cellContents的内容 ...
- C#的多线程(2)——机制探索
注:本文中出现的代码均在.net Framework RC3环境中运行通过 一.多线程的概念 Windows是一个多任务的系统,如果你使用的是windows 2000及 其以上版本,你可以通过任务管理 ...
- Java实用教程笔记 Java多线程机制
Java多线程机制 泛型要考,后来又说不考了 多线程不考 12.1 进程与线程Process and Thread 12.2Java中的线程Threads in Java 线程的状态与生命周期The ...
最新文章
- pytorch学习笔记(二):gradien
- LETTers比赛第三场 --1003 大明A+B解题报告
- [导入] 堆和栈的区别
- LeetCode 1272. 删除区间
- 暑假攻略:怎样让孩子过一个充实又省钱的假期
- access制作封装软件_用Access开发《社工服务管理系统》
- 通过Redis的Pub/Sub实现对服务器群的监控管理
- 系统学习深度学习(九)--激活函数总结
- 如何使用js判断视频是否可以成功访问
- LinAlgError: SVD did not converge
- 怎么判断二阶导数是否异号_「高等数学」给出函数的二阶导函数图形,求该曲线图形拐点的个数...
- 麒麟系统安装打印机共享_银河麒麟 惠普打印机驱动怎么安装
- 【转载】DirectX支配游戏!历代GPU架构全解析
- 标签打印软件如何设计正反面打印模式
- Cadence 16.6快速创建多引脚芯片原理图符号
- 云计算是什么?新手学习云计算的学习路线
- day 82 Vue学习三之vue组件
- 中国目前的人工智能在全球处于什么水平?
- PPT文件不能编辑可以这样解决
- 未来电竞旗舰:iQOO 8系列售价3799元起