第9章 多线程 王德俊 上海交通大学继续教育学院.

Slides:



Advertisements
Similar presentations
2007 年 6 月 楚雄师范学院计科系 离 散 数 学 第三章 逻辑代数 ( 上 ) 命题演算.
Advertisements

Java 程序设计 第 8 章 多线程. 第 8 章 Java 的多线程 8.1 线程及其创建 Java 中的线程 Java 程序通过流控制来执行程序流,程序中单个顺序的流 控制称为线程, 多线程则指的是在单个程序中可以同时运行 多个不同的线程执行不同的任务。 单个程序内部也可以在同一时刻进行多种运算。
阻塞操作. 在 linux 里,一个等待队列由一个 wait_queue_head_t 类型的结构来描述 等待队列的初始化: static wait_queue_head_t testqueue; init_waitqueue_head(&testqueue);
Linux 系统. 操作系统发展需求 1 没有操作系统 2 简单批处理操作系统 3 多道程序设计的批处理 4 多道程序设计的分时操作系统 5 多处理机并行系统 6 网络操作系统 7 分布式操作系统.
LSF系统介绍 张焕杰 中国科学技术大学网络信息中心
讓你的程式具有多工(Multitasking) 及多重處理(Multiprocessing)的能力
四資二甲 第三週作業 物件導向程式設計.
第9章 Java多线程机制 9.1 Java中的线程 9.2 Thread的子类创建线程 9.3 使用Runable接口
Oracle数据库 Oracle 子程序.
第14章 c++中的代码重用.
第九章 字符串.
陈香兰 助教:陈博、李春华 Spring 2009 嵌入式操作系统 陈香兰 助教:陈博、李春华 Spring 2009.
Kvm异步缺页中断 浙江大学计算机体系结构实验室 徐浩.
LSF系统介绍 张焕杰 中国科学技术大学网络信息中心
OpenMP简介和开发教程 广州创龙电子科技有限公司
EBNF 请用扩展的 BNF 描述 C语言里语句的结构; 请用扩展的 BNF 描述 C++语言里类声明的结构;
C#程序设计 c# programming 多线程 C#程序设计课程组.
第14章 多线程和异步程序设计 14.1 多线程程序设计 14.2 异步程序设计.
总复习 C#&.Net.
欢乐玩转单元测试之JUnit 讲师:FREE QQ:
2018/12/3 面向对象与多线程综合实验-网络编程 教师:段鹏飞.
第9章 多线程 王德俊 上海交通大学继续教育学院.
管理信息结构SMI.
委派與執行緒 建國科技大學 資管系 饒瑞佶.
实践演练 广州创龙电子科技有限公司 01 广州创龙电子科技有限公司
走进编程 程序的顺序结构(二).
辅导课程六.
网络常用常用命令 课件制作人:谢希仁.
临界区软件互斥软件实现算法.
第一单元 初识C程序与C程序开发平台搭建 ---观其大略
第五讲 四则运算计算器(一) 精品教程《C#程序设计与应用(第2版)清华大学出版社 谭恒松 主编
第十章 IDL访问数据库 10.1 数据库与数据库访问 1、数据库 数据库中数据的组织由低到高分为四级:字段、记录、表、数据库四种。
$16 进程和线程. $16 进程和线程 进程 进程 属性 ProcessName / Id MachineName / MainModule BasePriority StartTime / ExitTime TotalProcessorTime / UserProcessorTime PrivateMemorySize64.
本节内容 模拟线程切换 视频提供:昆山滴水信息技术有限公司 官网地址: 论坛地址: QQ交流 :
逆向工程-汇编语言
临界区软件互斥软件实现算法 主讲教师:夏莹杰
泛型委托 泛型接口、方法和委托.
华南理工大学 陈虎 博士 多核处理器上的操作系统 华南理工大学 陈虎 博士
第4章 PHP流程控制语句.
《JAVA程序设计》 语音答疑 辅导老师:高旻.
C++语言程序设计 C++语言程序设计 第七章 类与对象 第十一组 C++语言程序设计.
内容摘要 ■ 课程概述 ■ 教学安排 ■ 什么是操作系统? ■ 为什么学习操作系统? ■ 如何学习操作系统? ■ 操作系统实例
C语言程序设计 主讲教师:陆幼利.
EBNF与操作语义 请用扩展的 BNF 描述 javascript语言里语句的结构;并用操作语义的方法描述对应的语义规则
简单介绍 用C++实现简单的模板数据结构 ArrayList(数组, 类似std::vector)
$9 泛型基础.
C#面向对象程序设计 $6 深入理解类.
实验一 体验Nachos下的并发程序设计 陈毅东 2006年春.
姚金宇 MIT SCHEME 使用说明 姚金宇
分裂对象模型 C++ otcl.
信号量(Semaphore).
第4章 Excel电子表格制作软件 4.4 函数(一).
西南科技大学网络教育系列课程 高级语程序设计(Java) 第八章 线程.
Chapter 18 使用GRASP的对象设计示例.
多层循环 Private Sub Command1_Click() Dim i As Integer, j As Integer
辅导课程十五.
本节内容 模块隐藏 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ: QQ交流群 : 联系电话:
第7章 模板 陈哲 副教授 南京航空航天大学 计算机科学与技术学院.
临界区问题的硬件指令解决方案 (Synchronization Hardware)
本节内容 C语言的汇编表示 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ: QQ交流群 : 联系电话:
本节内容 Windows线程切换_时钟中断切换 视频提供:昆山滴水信息技术有限公司 官网地址: 论坛地址: QQ交流 :
基于列存储的RDF数据管理 朱敏
C++语言程序设计 C++语言程序设计 第一章 C++语言概述 第十一组 C++语言程序设计.
本节内容 动态链接库 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ: QQ交流群 : 联系电话:
C++语言程序设计 C++语言程序设计 第九章 类的特殊成员 第十一组 C++语言程序设计.
本节内容 进程 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ: QQ交流群 : 联系电话:
创建、启动和关闭Activity 本讲大纲: 1、创建Activity 2、配置Activity 3、启动和关闭Activity
使用Fragment 本讲大纲: 1、创建Fragment 2、在Activity中添加Fragment
本节内容 SEMAPHORE 视频提供:昆山滴水信息技术有限公司 官网地址: 论坛地址: QQ交流 :
§2 自由代数 定义19.7:设X是集合,G是一个T-代数,为X到G的函数,若对每个T-代数A和X到A的函数,都存在唯一的G到A的同态映射,使得=,则称G(更严格的说是(G,))是生成集X上的自由T-代数。X中的元素称为生成元。 A变, 变 变, 也变 对给定的 和A,是唯一的.
Presentation transcript:

第9章 多线程 王德俊 上海交通大学继续教育学院

第9章 多线程 9.1 线程及其实现方法 9.2 线程的同步控制

9.1 线程及其实现方法 9.1.1 线程的概念 9.1.2 线程的实现方法 9.1.3 线程的优先级

现代操作系统一般支持多线程,一个进程又可以由多个执行 单元,即多个线程组成。 9.1 线程及其实现方法 9.1.1 线程的概念 线程的概念与程序、进程的概念密切相关。 程序是程序员编写的静态代码文本。 进程则是程序的一次动态执行过程 同一个程序,可以被多次加载到不同的内存区域中、使用不同的机器 资源,从而形成多个不同的进程 现代操作系统一般支持多线程,一个进程又可以由多个执行 单元,即多个线程组成。 每个线程都共享着其进程所占用的内存空间和机器资源(如堆栈、 CPU、寄存器等) 实际上,一个线程是一组机器指令以及它共享的内存和资源。

线程和进程的主要区别: 9.1.1 线程的概念(续) 进程是由多个线程组成,即线程是进程的一个组成部分。 9.1 线程及其实现方法 9.1.1 线程的概念(续) 线程和进程的主要区别: 进程是由多个线程组成,即线程是进程的一个组成部分。 线程的划分尺度小,具有较高的并发效率。 进程独占相应的内存和资源,进程间切换需要切换资源;同一进程的 多个线程则是共享该进程所拥有的内存和资源,线程间切换开销小。 进程提供多个线程执行控制,而每个线程只能有一个运行入口、顺序 执行序列和出口(“线序”执行)。 线程不能独立执行,而必须依赖于进程所提供的环境。

线程的创建和应用主要是由Thread类和ThreadStart委托来实现。 Thread类的构造函数: 9.1 线程及其实现方法 9.1.2 线程的实现方法 线程的创建和应用主要是由Thread类和ThreadStart委托来实现。 Thread类的构造函数: (1)构造函数:用于创建线程,主要有两个重载版本: public Thread(ThreadStart start) //该构造函数创建的线程关联没有参数的方法 public Thread(ParameterizedThreadStart start) //该构造函数创建的线程关联带一个object类型参数的方法 (2)每个线程都必须关联一个无返回类型的方法(称为线程方法), 如果关联的方法无参数,则用第一个构造函数创建线程;如果关联的 方法带一个参数,则用第二个构造函数创建线程。

9.1.2 线程的实现方法(续) (3)构造函数中,参数start是ThreadStart类型或ParameterizedThreadStart 类型的变量。 (4)这两种委托类型的声明如下: public delegate void ThreadStart() public delegate void ParameterizedThreadStart(Object obj) (5)线程关联的方法必须与所使用的委托类型相一致,返回类型必须为 void,且在创建委托对象时关联的方法必须是已经确定了的。这些方法通 常是类的静态方法和对象的方法。

实现方法举例: 9.1.2 线程的实现方法 下面代码先定义类A,它有两个静态方法f()和g(), g()带有object类型的参数obj: 9.1 线程及其实现方法 9.1.2 线程的实现方法 实现方法举例: 下面代码先定义类A,它有两个静态方法f()和g(), g()带有object类型的参数obj: class A { public static void f() Console.WriteLine("这是关联方法f()的线程"); } public static void g(object obj) Console.WriteLine("这是关联方法g()的线程:"+obj.ToString());

通过委托类型ThreadStart和ParameterizedThreadStart关联方法f()和g() 9.1 线程及其实现方法 9.1.2 线程的实现方法 通过委托类型ThreadStart和ParameterizedThreadStart关联方法f()和g() ThreadStart thst = new ThreadStart(A.f); ParameterizedThreadStart pthst = new ParameterizedThreadStart(A.g); 创建线程th1和th2,并执行它们: Thread th1 = new Thread(thst); //关联方法f() Thread th2 = new Thread(pthst); //关联方法g(),带一个参数 th1.Start(); //启动线程th1(执行方法f()) th2.Start(200); //启动线程th2(执行方法g(),并将200作为参数值传给该方法)

9.1 线程及其实现方法 9.1.2 线程的实现方法 输出结果: 这是关联方法f()的线程 这是关联方法g()的线程:200

Thread类的主要方法 Start()方法 Abort()方法 该方法用于启动已经创建的线程,线程将进入Running状态(线程刚创 建完时是处于Unstarted状态)。 如启动线程th1的语句是:th1.Start(); Abort()方法 该方法用于终止线程,使线程进入Aborted状态。 如终止线程th的语句是:th.Abort();

Thread类的主要方法 Suspend()方法和Resume()方法 Join()方法 Suspend()方法用于挂起线程,使线程进入Suspended状态; Resume()方法则用于将被挂起的线程重新工作,使得它进入Running状 态。 Join()方法 假设在线程th1中对线程th2执行下列语句: th2.Join();表示将阻止线程th1的执行,直到th2执行完为止(才继续执行 th1)。 th2.Join(500); 表示阻止线程th1,直到500毫秒以后th1才运行:

Thread类的主要属性 CurrentThread属性 IsBackground属性 获取当前正在运行的线程。 该属性用于获取或设置指示当前线程是否为后台线程。 值为true时表示为后台线程,这时该线程随着主进程的结束而结束, 而不管该线程是否已经运行结束; 值为false(默认值)时表示为前台线程,只有所有的前台线程运 行结束后,主线程才能终止。

Thread类的主要属性 ManagedThreadId属性 Name属性 ThreadState属性 获取当前托管线程的唯一标识符。 获取或设置线程的名称。 ThreadState属性 返回当前线程的状态。线程的状态包括Running、StopRequested、 SuspendRequested、Background、Unstarted、Stopped、WaitSleepJoin、 Suspended、AbortRequested和Aborted。

线程的优先级是用Thread类的Priority属性来设置 9.1 线程及其实现方法 9.1.3 线程的优先级 线程的优先级是用Thread类的Priority属性来设置 其值集是一个枚举,即{Lowest, BelowNormal, Normal, AboveNormal, Highest},优先级别依次从低到高 Priority属性的默认设置是ThreadPriority.Normal。 说明:操作系统并不能够保证拥有高优先级的线程每次都能 够获得比低优先级线程更高执行权限,这跟操作系统的调度 算法有关。

本讲小结 线程的概念 线程的实现方法 线程的优先级