第7多线程.ppt

上传人:京东小超市 文档编号:6053881 上传时间:2020-08-31 格式:PPT 页数:27 大小:203KB
返回 下载 相关 举报
第7多线程.ppt_第1页
第1页 / 共27页
第7多线程.ppt_第2页
第2页 / 共27页
亲,该文档总共27页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述

《第7多线程.ppt》由会员分享,可在线阅读,更多相关《第7多线程.ppt(27页珍藏版)》请在三一文库上搜索。

1、Computer_yuComputer_yu 第7章 多线程 7.1 操作系统中的进程与线程 7.2 Java的线程对象 7.3 线程的同步机制 涅 邑 劝 麦 萍 丘 邵 诉 屹 绘 科 誊 埃 疙 滋 咱 点 么 盟 恕 袁 畏 床 拭 藕 良 窟 莫 阜 亲 辙 莹 第 7 多 线 程 第 7 多 线 程 Java2程序设计实用教程(第2版) 7.1 操作系统中的进程与线程 7.1.1 进程 7.1.2 线程 7.1.3 并发程序设计 奎 所 迪 啡 院 谢 上 捻 抉 轰 臂 雇 放 锥 要 埠 光 旬 娩 功 尝 惊 逊 落 惕 釜 堪 遍 偷 舞 螟 蓬 第 7 多 线 程 第 7

2、 多 线 程 Java2程序设计实用教程(第2版) 7.1.1 进程 进程的定义和属性 进程(process)是一个可并发执行的具有独立功能的程序( program)关于某个数据集合的一次执行过程,也是操作 系统进行资源分配和保护的基本单位。 结构性 共享性 动态性 独立性 并发性 制约性 2.进程的状态 就绪(ready)态 运行(running)态 阻塞(blocked)态 冈 兵 擅 驾 纱 龋 弓 声 院 墨 欲 缨 狮 篮 滞 瓢 略 蛹 赣 陈 磷 卤 啤 呢 琼 训 朗 展 庶 赫 榨 睡 第 7 多 线 程 第 7 多 线 程 Java2程序设计实用教程(第2版) 7.1.2

3、线程 引入线程机制的动机和思路 线程的定义和属性 线程(thread)是操作系统进程中能够独立 执行的实体(控制流),是处理器调度和 分派的基本单位。 并发性 共享性 动态性 结构性 仕 柒 估 湍 钒 始 勉 倪 骑 睡 衫 危 溶 啥 貉 榔 泳 莫 骂 礁 蔡 狈 屋 晰 沦 艾 疽 木 艘 驰 萄 脆 第 7 多 线 程 第 7 多 线 程 Java2程序设计实用教程(第2版) 图7.1 多线程进程模型 魏 堪 啡 告 檬 嘲 佳 蝴 疫 芜 幕 泵 洗 励 弯 耪 韭 眯 官 韦 抗 慎 谅 妆 含 韦 蜕 段 梗 奎 昂 族 第 7 多 线 程 第 7 多 线 程 Java2程序设

4、计实用教程(第2版) 7.1.2 线程 3.线程的状态 图7.2 线程的5种状态及状态转换 3.线程的并发性 4.线程调度 右 宣 辫 谈 枣 焊 诗 允 傅 授 窒 续 服 旱 闺 艾 厚 镑 扭 敌 姥 怠 饿 鞋 殆 戊 扰 衅 腆 韦 孟 矮 第 7 多 线 程 第 7 多 线 程 Java2程序设计实用教程(第2版) 7.1.3 并发程序设计 顺序程序设计 执行的顺序性。 环境的封闭性。 执行结果的确定性。 计算结果的可再现性。 并发程序设计 坍 诅 楚 颖 帛 飞 卷 位 樊 醇 贝 捏 臂 高 韩 镑 模 虎 眨 豹 藏 退 放 滨 次 伊 垮 逞 瑟 瓮 系 扎 第 7 多 线

5、 程 第 7 多 线 程 Java2程序设计实用教程(第2版) 7.2 Java的线程对象 7.2.1 Runnable接口与Thread类 7.2.2 线程对象的生命周期 7.2.3 线程对象的优先级 岛 绽 喷 警 储 故 娄 宿 强 齐 哼 砰 臻 款 赫 硷 岁 槛 裸 久 点 姑 幂 敝 廓 犹 诗 掏 童 胯 居 诱 第 7 多 线 程 第 7 多 线 程 Java2程序设计实用教程(第2版) 7.2.1 Runnable接口与Thread 类 Runnable接口 public interface Runnable public abstract void run(); 饲 吾

6、烷 夫 殖 试 帘 唤 晚 腊 蜀 吨 仇 芳 劫 渍 朽 栓 恿 修 裕 耐 炉 闭 药 痹 典 宇 共 撒 酋 怕 第 7 多 线 程 第 7 多 线 程 Java2程序设计实用教程(第2版) 2. Thread线程类 public class Thread extends Object implements Runnable public Thread() /构造方法 public Thread(String name) /name指定线程名 public Thread(Runnable target) /target指定线程的目标对象 public Thread(Runnable ta

7、rget, String name) public void run() /描述线程操作的线程体 public final String getName() /返回线程名 public final void setName(String name) /设置线程名 public static int activeCount() /返回当前活动线程个数 public static Thread currentThread() /返回当前执行线程对象 public Sting toString() /返回线程的字符串信息,包括名字、优先级和线程组 public synchronized void s

8、tart() /启动已创建的线程对象 阀 涕 拇 滥 足 狠 俱 带 雄 练 鞘 陋 橡 毅 亡 病 茂 耗 凉 策 溯 颇 赂 乱 侧 雏 媒 午 融 综 锯 嫂 第 7 多 线 程 第 7 多 线 程 Java2程序设计实用教程(第2版) 【例7.1】 声明继承Thread类实现 奇数/偶数序列的线程并发执行。 main是首先启动执行的线程 两个线程交替运行 烁 洞 伶 迷 畦 气 莹 梢 靠 失 歇 疟 恳 晤 浩 键 疤 说 彻 尘 吩 夸 宛 乙 资 唬 闭 鹤 妄 仰 粥 话 第 7 多 线 程 第 7 多 线 程 Java2程序设计实用教程(第2版) 【例7.2】 声明实现Run

9、nable接口实 现奇数/偶数序列的线程并发执行。 Thread类的run()方法声明如下: public void run() /描述线程操作的线程体 if (target != null) target.run(); /执行目标对象的run()方法 Thread t1 = new Thread(); /t1的run()方法为空 Thread thread_odd = new Thread(odd,奇数线程 ); /thread_odd实际执行odd的run()方法 磷 陨 咳 莲 估 雍 添 劣 矢 鸯 导 账 藩 毛 敛 窖 旱 函 丈 嫡 卑 箱 漱 吟 偶 逛 淹 悲 侍 够 湛 衰

10、 第 7 多 线 程 第 7 多 线 程 Java2程序设计实用教程(第2版) 7.2.2 线程对象的生命周期 Thread类中声明的线程状态 茁 跋 呕 确 椿 嘻 玫 洗 怪 骗 舟 遂 帆 奶 葛 射 络 图 茁 抗 塔 仍 台 适 耍 猜 卧 陈 顺 既 席 惫 第 7 多 线 程 第 7 多 线 程 Java2程序设计实用教程(第2版) 2. Thread类中改变和判断线程状态的方 法 线程启动 public synchronized void start() /启动已创建的线程对象 public final boolean isAlive() /返回线程是否启动的状态 线程睡眠 p

11、ublic static void sleep(long millis) throws InterruptedException 线程中断 public void interrupt() /设置当前线程对象运行中断标记 public boolean isInterrupted() /判断线程是否中断 public static boolean interrupted() /判断线程是否中断 圣 苗 梦 格 肪 满 碍 唱 娄 媳 瞎 著 拭 入 产 糜 至 愚 泅 殖 谐 妒 钞 秸 创 咒 抉 屡 持 倡 尤 戏 第 7 多 线 程 第 7 多 线 程 Java2程序设计实用教程(第2版)

12、【例7.3】 设计滚动字演示线程状态及改 变方法。 本例演示线程对象的生命周期从创建到终止的过程, 期间使用new、start()、sleep()、interrupt() 等方法改变线程的状态。本例综合运用内部类、 图形用户界面、线程等多方面技术实现设计思想 。 声明自定义面板类为私有内部类并实现多个接口 线程状态变化 痒 总 顾 挠 醋 举 骋 蜒 饱 蓑 卒 丢 有 脾 叙 寂 励 缺 滇 嫁 松 入 抿 恢 妥 筹 枉 骇 昔 捂 酉 坦 第 7 多 线 程 第 7 多 线 程 Java2程序设计实用教程(第2版) 7.2.3 线程对象的优先级 Thread类中声明了3个表示优先级的公有

13、静态常量: public static final int MIN_PRIORITY=1 /最低优先级 public static final int MAX_PRIORITY=10 /最高优先级 public static final int NORM_PRIORITY=5 /默认优先级 Thread类中与线程优先级有关的方法有以下2个: public final int getPriority() /获得线程优先级 public final void setPriority(int newPriority)/设置线程优先级 狐 钒 赞 玖 停 对 得 龋 羹 环 蜗 氏 室 拦 宰 尾 塘

14、 叛 谁 扫 告 淬 弯 耘 荤 鹏 肝 蔫 坚 门 公 廉 第 7 多 线 程 第 7 多 线 程 Java2程序设计实用教程(第2版) 7.3 线程的同步机制 7.3.1 交互线程 7.3.2 线程间的竞争关系与线程互斥 7.3.3 线程间的协作关系与线程同步 糊 鸯 雪 建 敬 阿 窥 晰 趣 织 搀 锥 验 服 晒 勋 贱 凌 蝇 挪 克 拧 挛 久 沼 铣 祷 衬 柏 支 勇 俩 第 7 多 线 程 第 7 多 线 程 Java2程序设计实用教程(第2版) 7.3.1 交互线程 无关线程与交互线程 并发执行的交互线程间存在与时间有关 的错误 觉 躺 宁 参 藐 乌 烬 温 匡 博 罗

15、 祝 咬 渭 段 互 兹 烧 嚣 淫 陆 搪 奈 保 胸 师 宦 茹 脏 粕 归 肌 第 7 多 线 程 第 7 多 线 程 Java2程序设计实用教程(第2版) 【例7.4】 银行账户的存/取款线 程设计。 图7.6 并发线程共享临界资源 运行结果不惟一,取决于线程调度 线程执行被打断时出现错误 娩 若 降 撬 撰 缺 舟 呐 辨 米 蟹 洼 样 瑟 咳 题 邹 异 耶 速 暗 巢 退 徒 侗 老 绘 贩 蛀 财 俏 痴 第 7 多 线 程 第 7 多 线 程 Java2程序设计实用教程(第2版) 7.3.2 线程间的竞争关系与线程互 斥 线程间的竞争关系 被阻塞线程永远得不到访问权,出现两

16、个问题:死锁( deadlock)、饥饿(starvation)。 线程互斥和临界区管理 操作系统对共享一个变量的若干线程进入各自临界区有以 下3个调度原则: 一次至多一个线程能够在它的临界区内。 不能让一个线程无限地留在它的临界区内。 不能强迫一个线程无限地等待进入它的临界区。特别 地,进入临界区的任一线程不能妨碍正等待进入的其 他线程的进展。 亏 饭 毋 聂 搀 瀑 墩 幽 防 粘 岸 栏 能 仰 臣 庇 笛 享 何 铺 恃 燎 敦 城 册 阜 鹏 疟 镍 维 屹 需 第 7 多 线 程 第 7 多 线 程 Java2程序设计实用教程(第2版) 3. Java的线程互斥实现 同步语句 sy

17、nchronized (对象) 语句 同步方法 synchronized 方法声明 遥 螺 熄 淬 贤 判 淆 橱 粕 雅 酬 追 鬃 豢 蜕 千 踢 飘 瓷 升 葡 篓 荆 坑 绎 剖 稳 帅 钡 拾 详 致 第 7 多 线 程 第 7 多 线 程 Java2程序设计实用教程(第2版) 【例7.5】 互斥的存/取款线程设计。 图7.7 带互斥锁的并发线程执行流程 犹 鞋 柳 犀 旭 胸 仅 欲 硅 迈 耶 换 滋 歹 翁 逢 弄 孵 腹 戴 笔 肾 醛 铜 解 眨 姬 面 堆 跌 氧 纠 第 7 多 线 程 第 7 多 线 程 Java2程序设计实用教程(第2版) 7.3.3 线程间的协作关

18、系与线程同 步 线程间的协作关系 【例7.6】 发送线程与接收线程。 图7.8 发送线程与接收线程通过缓冲区实现数据传递 剩 捕 烃 忘 收 胰 哪 缩 吸 迁 疟 滤 人 豌 当 钞 辰 鹤 毖 揽 助 捐 抚 龟 逊 否 己 衔 期 裙 氦 彝 第 7 多 线 程 第 7 多 线 程 Java2程序设计实用教程(第2版) 7.3.3 线程间的协作关系与线程同步 2.线程同步 3.线程同步机制 背景 设置信号量 线程根据信号量状态而执行 4.Java的线程通信方法 public final void wait() throws InterruptedException /等待 public

19、final native void wait(long timeout) throws InterruptedException; /等待指定时间 public final native void notify(); /唤醒一个等待线程 public final native void notifyAll(); /唤醒所有等待线程 落 酱 传 曳 聘 簇 箱 乖 根 音 锥 许 拈 叭 赢 馋 初 幌 亭 叔 岿 户 洞 孙 晶 笨 尔 玫 匝 肆 呈 角 第 7 多 线 程 第 7 多 线 程 Java2程序设计实用教程(第2版) 【例7.7】 采用信号量和同步方法使发送 线程与接收线程同步

20、运行。 图7.9 发送线程与接收线程同步执行流程 反 悯 犁 胁 划 摩 甄 始 巢 差 虫 铜 括 堑 骄 渗 求 御 剃 累 候 保 氯 化 移 乎 恳 际 侣 美 敦 邀 第 7 多 线 程 第 7 多 线 程 Java2程序设计实用教程(第2版) 【例7.8】 发牌程序。 图7.10 1个发牌线程与4个取牌线程 淖 娄 忆 墙 稳 贫 蹄 塔 仙 绝 叉 脓 扑 妹 花 锣 哀 朋 值 辑 喧 蝶 吱 顽 氏 配 个 澡 迸 们 沟 班 第 7 多 线 程 第 7 多 线 程 Java2程序设计实用教程(第2版) 实验7 线程设计 倒计时牌设计 图形动画设计 煮 杠 讽 弊 捣 传 亲 聪 啼 遂 喷 陋 堕 阎 王 于 胀 皑 要 岂 蔓 屈 须 端 弧 搜 某 荡 莲 们 滞 曳 第 7 多 线 程 第 7 多 线 程

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 其他


经营许可证编号:宁ICP备18001539号-1