JAVA编程高级-多线程编程..ppt

  1. 1、本文档共31页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
JAVA编程高级 —— 多线程编程 多线程编程 本章要点 多线程简介 多线程模型 多线程实现的两种方式 实现Runnable接口 继承Thread类 线程的属性和控制 线程状态及其生命周期 线程类的主要方法 休眠和中断 多线程同步/通信问题 线程同步,锁和死锁 Contents 多线程简介 进程/线程区别 Contents 多线程实现的两种方式 多线程的实现 (1) 创建线程类 继承Thread类 或 实现Runnable接口 (2) 通过Thread类构造器来创建线程对象 Thread( ) Thread(Runnable target) (3) 通过start()方法激活线程对象 线程运行 多线程实现的两种方式 创建线程的两种方式 — 线程类 继承Thread类 —— java.lang.Thread 实现Runnable接口 —— java.lang.Runnable run( )方法 — 线程运行体 要将一段代码(线程体)在一个新的线程上运行,该代码应该在一个线程类的run( )函数中 写一个类implements Runnable接口,且必须覆盖Runnable接口中的run( )方法 写一个类extends Thread类,且必须重写Thread类的run( )方法 继承Thread类实现线程类 继承Thread类实现线程类 run( ) 与 start( ) 实现Runnable接口实现线程类 两种实现方式的比较 两种方式的比较 使用Runnable接口可以避免由于JAVA的单继承性带来的局限 适合多个相同的程序代码的线程去处理同一资源情况,把线程同程序的代码、数据有效的分离 推荐使用实现Runnable接口 示例 Contents 线程状态及其生命周期 线程的状态及其生命周期 一个 Thread 对象在它的整个生存期中能以几种不同的状态存在 线程类中的主要方法 线程中的主要方法 —— java.lang.Thread 线程的优先级 线程的优先级 Java提供一个线程调度器来监控程序中启动后进入就绪状态的所用线程,线程调度器按照线程的优先级来决定应调度哪个线程来执行 线程的优先级用数字表示,范围从1到10,一个线程缺省的优先级是5 Thread.MIN_PRIORITY = 1 Thread.NORM_PRIORITY = 5 Thread.MAX_PRIORITY = 10 线程优先级方法 getPriority( ) —— 确定线程的优先级 setPriority( ) —— 设置线程的优先级 线程的休眠 线程的休眠 线程的中断 线程的终止 自动终止 — 一个线程完成执行后,不能再次运行 手动终止 stop( ) —— 已过时,基本不用 interrupt( ) —— 粗暴的终止方式 可通过使用一个标志指示 run 方法退出,从而终止线程 —— 推荐使用 线程的高级操作 线程的高级操作 Object类中线程的相关方法: void wait() 导致当前的线程等待,直到其他线程调用此对象的 notify()方法或 notifyAll() 方法。 void notify() 唤醒在此对象监视器上等待的单个线程。 void notifyAll() 唤醒在此对象监视器上等待的所有线程。 Contents 线程同步 线程同步 有时两个或多个线程可能会试图同时访问一个资源 例如,一个线程可能尝试从一个文件中读取数据,而另一个线程则尝试在同一文件中修改数据 在此情况下,数据可能会变得不一致 为了确保在任何时间点一个共享的资源只被一个线程使用,使用了“同步” 当一个线程运行到需要同步的语句后,CPU不去执行其他线程中的、可能影响当前线程中的下一句代码的执行结果的代码块,必须等到下一句执行完后才能去执行其他线程中的相关代码块,这就是线程同步 锁 锁 实现同步的两种方式 — 锁定方法 锁 实现同步的两种方式—锁定代码块 锁 实现同步的两种方式 注意事项: 受到synchronized保护的程序代码块和方法中,要访问的对象属性必须设定为private,因为如果不设定为private,那么就可以用不同的方式来访问它,这样就达不到保护的效果了 示例: Syn.java 锁 死锁 死锁 乱用synchronized可能会造成系统打死锁(D

文档评论(0)

zilaiye + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档