java多线程编程课件.ppt

  1. 1、本文档共44页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
三、线程的同步与死锁 对于一个多线程程序,虽然把一个方法声明成 synchronized 是一种解决并发访问问题的很简单的途径,但是 因为每个线程都必须等待执行线程的同步方法结束直到轮到自 己,所以这对程序的性能会造成不良的影响。对于耗时很长才 能结束的复杂 synchronized 方法,该程序的性能损失是非常之 大的。为了降低对整个方法进行 synchronized 声明时它对程序 性能所造成的影响,可以使用同步 synchronized 语句来代替同 步方法。当程序块执行到方法中访问共享对象的时候, synchronized 语句才锁定该对象。因此,在这种方式下, synchronized 方法在整个执行过程中对象的锁并不总是保持有 效,只有在 synchronized 语句被执行时对象的锁才有效,这样 程序的效率有可能会更高一些。 三、线程的同步与死锁 ? 线程死锁 当一个线程在执行过程中由于某种原因而暂时阻止了该线 程的执行,则该线程处于堵塞状态,被堵塞的线程在没有外界 干扰的情况下有可能永远不会被执行。 由于线程可能进入堵塞状态,而且由于对象中可能会拥有 同步方法 ( 除非同步锁定被解除 ) ,所以一个线程完全有可能等 候另一个对象,而另一个对象又在等候下一个对象,依此类推, 该等候链最可怕的情形就是进入封闭的循环等候状态,此时所 有线程都会陷入无休止的相互等待状态,谁也动弹不得。如果 对于一个要加锁的对象永远不能被锁,那么等着给它上锁的线 程将无限期地等待,这种情况称为死锁,当两个或多个线程因 为等待已被其他线程占有的锁而被永久地冻结时便发生了死锁。 三、线程的同步与死锁 造成线程被堵塞可能是有以下几个方面的原因: (1) 调用 sleep() 方法,使线程进入睡眠状态,在规定的时间内,这个线 程是不会运行的。 (2) 用 suspend() 方法暂停了线程的执行,除非线程收到 resume() 方法消 息,否则不会返回就绪状态。 (3) 用 wait() 方法暂停了线程的执行,除非线程收到 nofify() 或者 notifyAll() 消息,否则不会变成就绪状态。 (4) 线程正在等候一些 I/0( 输入输出 ) 操作的完成,即若 — 个数据流需要等 候一些 I/0 活动时,它便会自动进入堵塞状态。 (5) 线程试图调用另一个对象的同步方法,但那个对象正处于锁定状态。 即在调用对象的 synchronized 方法时,该对象的另一个 synchronized 方法正 在执行。 (6) 调用 yield() 方法自动放弃 CPU ,以便其他线程能够运行。 java 多线程编程 一、线程的概念 ? 进程与线程 进程是指可执行程序并存放在计算机存储器空间的一个 指令序列,它是一个动态执行的过程。进程是计算机多任务 操作系统为任务分配资源的最小单位,每个进程都应该有自 己的内存空间。 线程同进程一样,也是一个动态的概念和一个动态的执 行过程,但是线程比进程的内涵要小一个等级,一般一个进 程 ( 应用程序 ) 包含一个或多个线程,线程需要在进程的内存地 址空间中运行,是多任务操作系统用于分配计算机 CPU 时间 片的最小单位。 一、线程的概念 一个 Java 多线程程序在 Java 虚拟机中执行时,每一个线 程的执行过程是由 Java 执行系统的线程调度来控制的, Java 语 言多线程程序自身是不能控制每个线程执行顺序的。在目前的 多任务操作系统中,当一个单一线程被启动以后,它可以被挂 起来,被挂起的线程程序代码并不从计算机内存中清除,只是 暂时不让它执行了,在内存中被挂起的线程还可以重新被恢复 执行,以便保证实现多任务被同时处理。多任务操作系统在任 何时间都可以停止或终止线程,被终止的线程程序代码将被从 计算机内存中清除,被终止的线程是不能再重新恢复执行的。 一、线程的概念 ? 线程调度与优先级 在 CPU 上以某种次序执行多个线程称为调度,调度使 JVM 对运行的多个线程进行协调,以避免多个线程争用有限的系统 资源而导致系统死机或崩溃。 为控制线程的协调运行, Java 定义了线程监视器来监控系 统中处于就绪状态的所有线程,线程调度采用“抢占式”策略, 按照线程的优先级别选择线程获得处理器。 线程优先级 (Priority) 告诉线程监视器该线程的重要性,如 果有大量线程被堵塞

您可能关注的文档

文档评论(0)

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

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

1亿VIP精品文档

相关文档