ImageVerifierCode 换一换
格式:PPT , 页数:25 ,大小:405KB ,
资源ID:10036269      下载积分:10 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.docduoduo.com/d-10036269.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录   微博登录 

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(第9章 多线程.ppt)为本站会员(hskm5268)主动上传,道客多多仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知道客多多(发送邮件至docduoduo@163.com或直接QQ联系客服),我们立即给予删除!

第9章 多线程.ppt

1、第9章 多线程,第9章 多线程,本章主要讲述如下内容: 多线程的概念; 线程的生命周期; 多线程编程中的常量和方法; 线程调度方法; 资源冲突与协调; 线程之间的通信。,Java中多线程的基本概念,在多线程模型中,多个线程共存于同一块内存中,且共享资源。每个线程分配有限的时间片来处理任务。由于CPU在各个线程之间的切换速度非常快,用户感觉不到,从而认为并行运行。,多线程的特点,多个线程在运行时,系统自动在线程之间进行切换;由于多个线程共存于同一块内存,线程之间的通信非常容易;Java将线程视为一个对象。线程要么是Thread类的对象,要么是接口Runnable的对象。,多线程的特点(续),当多

2、个线程并行执行时,具有较高优先级的线程将获得较多的CPU时间片;优先级是从0到10的整数,并且它仅表示线程之间的相对关系;多个线程共享一组资源,有可能在运行时产生冲突。必须采用synchronized关键字协调资源,实现线程同步。,多线程编程中常用的常量和方法,线程类Thread定义在java.lang包中;Thread类包含的常量有: (1) public static final int MAX_PRIORITY最大优先级,值是10。 (2) public static final int MIN_PRIORITY最小优先级,值是1。 (3) public static final int

3、 NORM_PRIORITY缺省优先级,值是5。,多线程编程中常用的常量和方法(续),常用方法: currentThread( ) 返回当前运行的线程对象,是一个静态的方法。 sleep(int n) 使当前运行的线程睡n个毫秒,然后继续执行,也是静态方法。 yield( ) 使当前运行的线程放弃执行,切换到其它线程,是一个静态方法。 isAlive( ) 判断线程是否处于执行的状态,返回值true表示处于运行状态,false表示已停止。 start( ) 使调用该方法的线程开始执行。 run( ) 该方法由start( )方法自动调用。,多线程编程中常用的常量和方法(续),常用方法: sto

4、p( ) 使线程停止执行,并退出可执行状态。 suspend( ) 使线程暂停执行,不退出可执行态。 resume( ) 将暂停的线程继续执行。 setName(String s) 赋予线程一个名字。 getName( ) 获得调用线程的名字。 getPriority( ) 获得调用线程的优先级。 setPriority(int p) 设置线程的优先级。 join( ) 等待线程死亡,若中断了该线程,将抛出异常。,多线程编程中常用的常量和方法(续),注意1:在创建线程对象时,缺省的线程优先级是5,一般设置优先级4到6之间,不要设置为10,否则其它线程将执行不到。 注意2:Java的调度器能使高

5、优先级的线程始终运行,一旦CPU有空闲,具有同等优先级的线程,以轮流的方式顺序使用时间片。,线程的生命周期,线程的生命周期,例9-1:单线程 源程序 运行,创建多线程的方法,方法1:通过Thread类的子类实现多线程。方法2:定义一个实现Runnable接口的类实现多线程。,创建多线程的方法(续),方法1:通过创建Thread类的子类实现多线程,步骤如下 : (1) 定义Thread类的一个子类。 (2) 定义子类中的方法run( ),覆盖父类中的 方法run( )。 (3) 创建该子类的一个线程对象。 (4) 通过start( )方法启动线程。例9-2: 源程序 运行,创建多线程的方法(续)

6、,方法2:通过接口创建多线程,步骤如下: (1)定义一个实现Runnable接口的类。 (2)定义方法run( )。Runnable接口中有一个空的方法run( ),实现它的类必须覆盖此方法。 (3)创建该类的一个线程对象,并将该对象作参数,传递给Thread类的构造函数,从而生成Thread类的一个对象。 注意这一步! (4)通过start( )方法启动线程。例9-3: 源程序 运行,创建多线程的方法(续),例9-3中需要注意的2点: (1) mt1.join( )是等待线程死亡,对该方法必须捕捉异常,或通过throws关键字指明可能要发生的异常。 (2) 对一个线程不能调用start( )

7、两次,否则会产生IllegalThreadStateException异常。,线程调度模型,线程调度程序挑选线程时,将选择处于就绪状态且优先级最高的线程。如果多个线程具有相同的优先级,它们将被轮流调度。例9-4:验证Java对多线程的调度方法。源程序 运行思考:在run()方法中,通过线程睡眠2个毫秒,模拟程序的执行。如果不睡眠,你知道输出什么结果吗?为什么?,资源冲突,多个线程同时运行虽然可以提高程序的执行效率,但由于共享一组资源,可能会产生冲突。例9-5: 源程序 运行,同步方法,Java通过关键字synchronized实现同步。当对一个对象(含方法)使用synchronized,这个对

8、象便被锁定或者说进入了监视器。在一个时刻只能有一个线程可以访问被锁定的对象。它访问结束时,让高优先级并处于就绪状态的线程,继续访问被锁定的对象,从而实现资源同步。 加锁的方法有两种: 锁定冲突的对象 锁定冲突的方法,同步方法(续),(1) 锁定冲突的对象。语法格式:,synchronized ( ObjRef )Block / 需要同步执行的语句体 锁定对象可以出现在任何一个方法中。,例如,修改程序9-5中的方法run( ) 如下:,public void run( ) synchronized(UserObj) UserObj.Play(num); 运行结果如下: 运行线程 NO:1 结束线

9、程 NO:1 运行线程 NO:2 结束线程 NO:2 运行线程 NO:3 结束线程 NO:3,同步方法(续),同步方法(续),(2) 锁定冲突的方法。语法格式:,synchronized 方法的定义,例:修改程序9-5中的方法Play( ) 如下: synchronized void Play(int n) / 中间的程序代码略,注意: (1) 对方法run( )无法加锁,不可避免冲突; (2) 对构造函数不能加锁,否则出现语法错误。,线程间通信,多线程通信的方法有两种:(1) 把共享变量和方法封装在一个类中实现;(2) 通过wait( )和notify( )方法实现。,通过封装共享变量实现线

10、程通信,例9-6:通过将共享变量封装在一个类中,实现线程通信 源程序 运行,通过系统方法实现线程通信,线程同步控制的第二种方法是采用如下几个系统方法: (1) wait( )方法:使一个线程进入等待状态,直到被唤醒。(2) notify( )方法:通知等待监视器的线程,该对象的状态已经发生了改变。 (3) notifyAll( )方法:唤醒从同一个监视器中用wait( )方法退出的所有线程,使它们按照优先级的顺序重新排队。例9-7:源程序 运行,线程调度建议,线程进入等待队列的方式有: 线程a正在使用某对象,线程b调用该对象的同步方法,则b进入队列; 调用wait( )方法使线程进入队列。 当一个同步方法调用返回时,或一个方法调用了wait( )方法时,另一线程就可访问冲突的对象。 线程调度程序在队列中选取优先级最高的线程。如果一个线程因调用wait( )而进入队列,则必须调用notify( )才能“解冻”该线程。,

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报