c#与.net程序设计课件第9章

c#与.net程序设计课件第9章

ID:20529346

大小:928.00 KB

页数:49页

时间:2018-10-13

c#与.net程序设计课件第9章_第1页
c#与.net程序设计课件第9章_第2页
c#与.net程序设计课件第9章_第3页
c#与.net程序设计课件第9章_第4页
c#与.net程序设计课件第9章_第5页
资源描述:

《c#与.net程序设计课件第9章》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、第9章多线程9.1一个简单的多线程应用程序9.2线程及其实现方法9.3线程的同步控制9.4线程池9.5线程对控件的访问本章内容9.1一个简单的多线程应用程序本小节创建的多线程应用程序一共包含两个线程,这两个线程并发地在屏幕上输出相关的字符串。程序的关键代码如下:classA{publicstaticintn=0;publicvoidf(){for(inti=0;i<10;i++){Console.WriteLine("f()在输出:{0}",A.n);A.n++;Thread.Sleep(100);}}}让当前线程睡眠100毫秒9.1一个简单的多线程应用程序classB{publicst

2、aticvoidg(){for(inti=0;i<10;i++){Console.WriteLine("g()在输出:{0}",A.n);A.n++;Thread.Sleep(100);}}}staticvoidMain(string[]args){Aa=newA();ThreadStartthst1=newThreadStart(a.f);ThreadStartthst2=newThreadStart(B.g);Threadth1=newThread(thst1);Threadth2=newThread(thst2);th1.Start();th2.Start();Console.Re

3、adKey();}创建线程thst1创建线程thst2建立委托对象,使之与给定的方法相关联可见,每个线程实际上是Thread类的对象,它是通过Thread类的构造函数来创建;并且每个线程都与既定的方法相关联启动线程让当前线程睡眠100毫秒——执行线程th1和th2实际上是执行方法a.f()和方法B.g()。——由这个例子可以看到,Thread类、委托类型ThreadStart等是多线程程序设计中的核心内容。9.2线程及其实现方法9.2.1线程的概念线程的概念与程序、进程的概念密切相关。程序是程序员编写的静态代码文本。进程则是程序的一次动态执行过程,进程运行时需要占用装载程序代码(编译后的

4、可执行代码)以及存放其所需数据的内存空间和其他的机器资源(如文件等),当进程终止时这些内存空间和资源也随之释放。显然,同一个程序,它可以被多次加载到不同的内存区域中、使用不同的机器资源,从而形成多个不同的进程,即一个程序可以形成多个进程。一个进程是由多个执行单元组成,每个执行单元就是一个线程,即进程是由多个线程组成。每个线程都共享着其进程所占用的内存空间和机器资源(如堆栈、CPU、寄存器等),实际上,一个线程是一组机器指令以及它共享的内存和资源。9.2线程及其实现方法9.2.1线程的概念线程和进程的主要区别在于:进程是由多个线程组成,即线程是进程的一个组成部分。线程的划分尺度小,具有较高

5、的并发效率。进程独占相应的内存和资源(其他进程不能使用),线程则是共享进程所拥有的内存和资源(其他线程也可以使用),从而极大地提高运行效率。进程提供多个线程执行控制,而每个线程只能有一个运行入口、顺序执行序列和出口(“线序”执行)。进程可以独立执行,但线程不能独立执行,而必须依赖于进程所提供的环境。9.2线程及其实现方法9.2.2线程的实现方法线程的创建和应用主要是由Thread类和ThreadStart委托来实现。Thread类的构造函数和主要方法说明如下:构造函数Thread类构造函数的作用是用于创建线程,它主要有两个重载版本:publicThread(ThreadStartstar

6、t)publicThread(ParameterizedThreadStartstart)其中,参数start是ThreadStart类型或ParameterizedThreadStart类型的变量。这两种委托类型的声明如下:publicdelegatevoidThreadStart()publicdelegatevoidParameterizedThreadStart(Objectobj)构造函数创建的线程关联没有参数的方法构造函数创建的线程关联带一个object类型参数的方法——每个线程都必须关联一个无返回类型的方法(称为线程方法),如果关联的方法无参数,则用第一个构造函数创建线程;

7、如果关联的方法带一个参数,则用第二个构造函数创建线程。——当然,线程间数据的传递也可以使用对象的成员变量或方法来实现,这也是常用的方法,但要在线程的同步控制下进行。9.2线程及其实现方法9.2.2线程的实现方法例如,下面代码先定义类A,它有两个静态方法f()和g(),其中后者带有object类型的参数obj:classA{publicstaticvoidf(){Console.WriteLine("这是关联方法f()的线程");}p

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。