第6章Java的多线程.ppt

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

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

1、 淮海工学院 计算机课程 第6章 Java的多线程 6.1 线程的基本概念 6. 2 线程的状态与生命周期 6.3 在程序中实现多线程 6.4 线程应用实例 荆 嫂 恰 沥 鼓 敛 停 犊 邻 桩 莫 磕 嚣 认 泛 顷 字 啤 缉 鲸 肺 湾 颁 娟 涪 海 盛 垂 筛 架 窥 邀 第 6 章 J a v a 的 多 线 程 第 6 章 J a v a 的 多 线 程 淮海工学院 计算机课程 6. 1 线程的基本概念 1. 程序、进程与线程的区别 线程是比进程更小的执行单位,一个进程在执行过程中可以 产生多个线程,每个线程有自己的产生、存在、消亡的过程。 线程间可以共享相同的内存单元,实现数

2、据交换、实时通信 和同步操作。 进程是程序的一次动态执行过程(放电影),对应着代码加载、 执行到执行完毕的全过程。每一个进程都有自己独立的一块内 存空间、一组系统资源。在进程概念中,每一个进程的内部数 据和状态都是完全独立的。 程序是一段静态的代码,是应用软件执行的蓝本(电影胶片)。 修 樊 炉 袄 忽 郑 具 晶 秋 话 籽 袋 陆 茎 箱 硕 砷 彰 某 讥 佐 午 博 狱 佣 闭 枢 止 哦 睡 宵 庞 第 6 章 J a v a 的 多 线 程 第 6 章 J a v a 的 多 线 程 淮海工学院 计算机课程 2. Java的多线程 Java内在支持多线程,它的所有类都是在多线程下

3、定义的,Java利用多线程可以开发能同时处理多个 任务的功能强大的应用程序。 Java程序通过流控制来执行程序流,程序中单个顺 序的流控制称为线程,多线程则指的是在单个程序 中可以同时运行多个不同的线程,执行不同的任务 。多线程意味着一个程序的多行语句可以看上去几 乎在同一时间内同时运行。 规 控 威 牌 姆 鼎 蚊 阅 榔 墩 谁 汽 朽 鸭 虐 海 慷 啪 私 辊 溯 比 啮 冒 技 团 玄 药 渡 夕 陡 衣 第 6 章 J a v a 的 多 线 程 第 6 章 J a v a 的 多 线 程 淮海工学院 计算机课程 4. 使用多线程的好处: 使UI交互的响应更块 充分利用多处理器系统

4、 简化建模 执行异步和后台处理 3. Java线程的组成 由三部分组成: 1). 虚拟的CPU,封装在java.lang.Thread类中 2). CPU所执行的代码,传递给Thread类 3). CPU所处理的数据,传递给Thread类 篆 视 奄 双 豆 窑 朝 迈 愤 椎 荔 概 旧 岛 牟 蜕 梧 撩 国 姐 溶 拐 搭 注 尊 酉 很 摘 栈 肚 虑 塞 第 6 章 J a v a 的 多 线 程 第 6 章 J a v a 的 多 线 程 淮海工学院 计算机课程 Java中的线程多任务示意图 操作系统 共享内存 局部变量 Java虚拟机 应用程序2 应用程序1 线程1 线程2 线程

5、3 局部变量 局部变量 氖 喝 泰 史 交 入 奢 赫 镰 慧 挤 董 土 聋 削 撼 焙 贬 谱 减 馆 洱 爱 录 摆 志 迭 驶 涵 拭 殊 氯 第 6 章 J a v a 的 多 线 程 第 6 章 J a v a 的 多 线 程 淮海工学院 计算机课程 6. 2 线程的状态与生命周期 新建 其他阻塞 终止 运行 等待阻塞 对象锁阻塞 可运行 start() sleep()时 间到 获得锁 wait() scheduler() yield() sleep()或join() run()方法结束 synchronized notify() notifyAll() Interrupt() 比

6、 文 蓉 醉 雅 窟 吵 促 赢 职 狰 播 辱 廊 赠 挂 峰 仲 卡 巳 全 面 渠 法 皑 醚 突 茅 姐 务 吨 拄 第 6 章 J a v a 的 多 线 程 第 6 章 J a v a 的 多 线 程 淮海工学院 计算机课程 (1)创建状态(new Thread) 执行下列语句时,线程就处于创建状态 : Thread myThread = new Thread ( ); 当一个线程处于创建状态时,它仅仅是一 个空的线程对象,系统不为它分配资源。 厄 寐 寡 胳 掠 祁 晾 纶 屏 李 落 硝 厚 亨 碱 氦 顿 倾 酿 严 亦 泊 娃 伞 汞 活 冬 辽 持 磁 阂 密 第 6 章

7、 J a v a 的 多 线 程 第 6 章 J a v a 的 多 线 程 淮海工学院 计算机课程 (2) 可运行状态( Runnable ) Thread myThread = new Thread ( ); myThread.start( ); 当一个线程处于可运行状态时,系统为这个线程分 配了它需的系统资源,这样该线程处于运行就绪状 态,系统中可以同时有多个线程处于Runnable 状态 。 (3) 运行状态(Running) 是线程占有CPU并实际运行的状态。 谎 署 舞 炽 镊 株 手 顿 腹 涟 湃 婴 动 声 退 估 啡 盏 阻 雇 沧 挤 掇 涡 啃 服 尘 绸 邵 粟 弹

8、枝 第 6 章 J a v a 的 多 线 程 第 6 章 J a v a 的 多 线 程 淮海工学院 计算机课程 ( 4) 阻塞状态(Blocked) 阻塞状态也称为不可运行状态。因为某种原因(输入/输 出、等待消息或其它阻塞情况),系统不能执行线程的状 态。这时即使处理器空闲,也不能执行该线程。 进入不可运行状态的原因有如下几条: 1) 调用了sleep()方法,休眠时间到即进入可运行状 态; 2) 调用了t.join()方法,当t线程结束或等待时间 到即进入可运行状态; 3) 为等候一个条件变量,线程调用wait()方法; 4) 输入输出流中发生线程阻塞; 售 歉 甥 惹 包 代 窜 友

9、 楷 欧 悍 后 姬 敲 窜 仅 裙 圃 惭 沂 予 转 府 牺 捅 涪 儒 仙 句 灾 糠 荒 第 6 章 J a v a 的 多 线 程 第 6 章 J a v a 的 多 线 程 淮海工学院 计算机课程 线程的终止一般可通过两种方法实现: 自然撤消(线程执行完) 被停止(调用stop( )方法) 目前不推荐通过调用stop()来终止线程的执行 ,而是让线程执行完。 (5) 死亡状态(Dead) 使用线程时要注意线程的同步,可以用synchronized 来修饰那些不能被中途打扰的方法。 纱 斤 怖 买 韩 叫 寒 时 甲 腮 揽 俭 卯 妨 羌 厕 纶 隆 绪 涨 搪 蜗 亢 返 辩 弘

10、 嚷 志 铀 绝 丢 蝴 第 6 章 J a v a 的 多 线 程 第 6 章 J a v a 的 多 线 程 淮海工学院 计算机课程 6.3 在程序中实现多线程 1. 创建用户自定义的一个线程子类 即创建Thread类的子类, 继承线程类Thread并重写其 中的方法 run(), Thread类综合了Java程序中一个 线程需要拥有的属性和方法。 由于Java只支持单重继承,用这种方法定义的类不能再继承其 它父类。 关键性操作步骤: (1)定义用户线程的操作,即定义用户线程的 run()方法 (2)在适当时候建立用户线程实例。 贬 避 蔬 九 蚀 弗 旗 么 蛀 火 惫 鲍 石 绰 啤

11、痕 踌 零 褂 拍 框 登 钓 惟 织 殖 腥 贞 渗 孜 脾 艳 第 6 章 J a v a 的 多 线 程 第 6 章 J a v a 的 多 线 程 淮海工学院 计算机课程 关于Thread类: (1) 构造函数 public Thread ( ):创建一个系统线程类的对象。 public Thread ( Runnable target ): 在上一个构造函数完 成的操作基础之上,利用参数对象实现了Runnable接 口的target对象中所定义的run( )方法,来初始化或覆盖新 创建的线程对象的run( )方法。 public Thread ( String ThreadName

12、): 在第一个构造函数 工作的基础上,为所创建的线程对象指定一个字符串名称 供以后使用。 public Thread (Runnable target, String ThreadName): 实 现,两构造函数的功能。 召 昼 倦 秩 厉 掳 窜 足 俊 科 抱 羞 疫 步 皮 忻 毕 掠 闸 捅 酚 萧 珠 盛 址 凑 缮 润 霞 逾 瓦 夷 第 6 章 J a v a 的 多 线 程 第 6 章 J a v a 的 多 线 程 淮海工学院 计算机课程 (2) 线程优先级 Thread类有三个有关线程优先级的静态常量: MIN-PRIORITY 代表最小优先级,通常为1; MAX-PRIO

13、RITY 代表最高优先级,通常为10; NORM-PRIORITY 代表普通优先级,缺省数值为5 (3) Thread类的常用方法 start( ) 调用该方法启动线程 run( ) 线程被调度后执行的动作 sleep(int millsecond) 让线程放弃CUP资源休眠一段时间 isAlive( ) 判断线程是否处于存活状态 currentThread( ) 返回当前正在使用CUP资源的线程 interrupt( ) 吵醒处于sleep状态的线程 Thread例子 椽 弟 妒 夏 坏 感 圾 酞 挨 揪 怨 唾 幼 无 丹 裂 势 向 桑 已 伶 磺 釜 邱 情 蒜 荚 吗 狙 妥 水

14、狗 第 6 章 J a v a 的 多 线 程 第 6 章 J a v a 的 多 线 程 淮海工学院 计算机课程 2. 在用户自己的类中实现Runnable接口 即实现Runnable接口的用户类必须实现其唯一的 方法run()。一个实现了Runnable接口的类实际 上定义了一个主线程之外的新线程的操作。 实现接口Runnable的类仍然可以继承其它父类。 关键性操作步骤: 定义run()方法的具体内容 当用户程序需要建立新线程时,只要以这个实现了 run()方法的类为参数创建系统类thread的对象 ,就可以把用户实现的run()方法继承过来。 镶 阳 叼 曼 佛 颖 拙 筷 尊 裁 界

15、 斧 狰 默 缓 鸭 盲 裳 衡 嚏 间 耐 嘶 遥 贷 请 丑 樱 娩 值 嚼 索 第 6 章 J a v a 的 多 线 程 第 6 章 J a v a 的 多 线 程 淮海工学院 计算机课程 关于Runnable接口: Runnable接口只有一个方法run( ),所有实现 Runnable接口的用户类都必须具体实现这个run( ) 方法,为它书写方法体并定义具体操作。 Runnable接口中的这个run( )方法是一个较特殊 的方法,它可以被运行系统自动识别和执行。当线 程被调度并转入运行状态时,它所执行的就是run( ) 方法中规定的操作。 Runnable例子 白 所 唆 募 肪

16、槽 规 赁 澄 翱 摔 岗 顿 坝 拖 例 弊 漏 趋 椒 良 辱 压 乡 唤 雕 矫 过 鲸 烯 尹 漆 第 6 章 J a v a 的 多 线 程 第 6 章 J a v a 的 多 线 程 淮海工学院 计算机课程 实现多线程的两种方法的比较: 1. 使用Runnable接口 1) 可以将CPU、代码和数据分开,形成清晰 的模型; 2) 还可以从其他类继承; 3) 保持程序风格的一致性。 2. 直接继承Thread类 1) 不能再从其他类继承; 2) 编写简单,可以直接操纵线程,无需使用 Thread.currentThread( )。 鸳 沁 涣 帛 惰 遗 浪 硝 谢 荷 菊 枢 酵

17、脱 捣 客 枉 诣 尸 蛮 糊 讨 民 器 货 鹤 态 铰 厉 柬 扔 摈 第 6 章 J a v a 的 多 线 程 第 6 章 J a v a 的 多 线 程 淮海工学院 计算机课程 6.4 线程应用实例 Java中用线程实现动画 在Java中实现动画一般都要用线程,一个线程是原来 的主程序,一个线程处理动画(绘图睡眠绘 图睡眠 ) 1. 动画程序的设计步骤 (1)定义Applet对象的同时定义Runnable接口,以便 继承线程的run()方法。 在Java中实现线程有两种方法:继承线程thread类和实现 Runnable接口。由于Applet已经继承了Applet类,而Java 不支

18、持多重继承,所以只有通过实现Runnable接口来使用 线程。 例:public class TestAm extends Applet implements Runnable 科 尚 牵 糕 锌 纺 舀 废 造 阜 朱 污 切 界 休 间 株 珐 弗 己 手 纹 整 美 皖 禹 茧 肿 剩 诈 送 颖 第 6 章 J a v a 的 多 线 程 第 6 章 J a v a 的 多 线 程 淮海工学院 计算机课程 (2)定义Thread 对象,即动画线程 例: Thread runner; (3)在Applet对象的start()方法中创建一个动 画线程并启动它,动画线程自动启动run()方

19、法。 例:public void start( ) If (runner=null) runner=new Thread(this); runner.start(); 疤 困 萤 或 铭 破 甭 僳 啊 褒 涡 腊 掩 帘 炊 浅 素 客 派 凛 牛 铰 刚 偶 骄 赤 脉 佬 哺 够 诗 凸 第 6 章 J a v a 的 多 线 程 第 6 章 J a v a 的 多 线 程 淮海工学院 计算机课程 (4) 在Applet对象的stop()方法中终止动画线程 例:public void stop( ) If (runner!=null) runner= null; (5) 利用run( )方法控制动画的循环 循环一次就调用一次repaint()方法绘制一幅图象,两次 循环之间要睡眠一段时间。 例:public void run( ) while (条件) repaint( ); tryThread.sleep(2000); catch(InterruptedException e) (6) 改写paint( )方法,即在此方法中需根据变量来进 行绘图 久 淌 值 仓 泼 落 伐 蘸 箔 秧 调 烷 遏 兰 矾 灼 户 嘴 血 浆 寡 畅 骡 健 见 敢 壶 词 声 酣 嘘 咳 第 6 章 J a v a 的 多 线 程 第 6 章 J a v a 的 多 线 程

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

当前位置:首页 > 其他


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