java网络编程第1篇.ppt

  1. 1、本文档共28页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第一章 线程与线程实现 课程目标 线程的概述: 线程的概念 线程的生命周期 线程同步/死锁 线程优先级 线程调度: Thread类和Runnable接口的作用 线程的创建 线程的使用 窗体动画的实现 体验项目——雷电游戏 本游戏属于射击游戏,友机和敌机相对飞行;可通过键盘控制友机左右移动,并且发射子弹攻打敌机,当发出的子弹打中敌机后,敌机爆炸,则本游戏结束;当友机和敌机相撞时,两架飞机同时都爆炸,本游戏结束。 游戏运行效果如图所示,该图显示友机发射子弹攻打敌机的效果: 当友机打中敌机时,敌机爆炸,效果如图所示: 线程的概述 线程概念和原理 线程是现代操作系统所提出的一个新概念,线程也被称作“轻量进程”,是比传统进程更小的一.种可以并发执行的执行单位。线程概念的引入提高了程序执行的并发度,从而提高了系统效率。JAVA提供了完全意义的多线程支持。 运用线程的结果类似于大家常说的“并行处理”,其实在我们日常生活中也常常进行着“并行处理”,您的血液循环、饥饿、愤怒可能同时发生;您的视、听、言、行也可能同时进行;您一面写文章、一面打印成报表、一面还收电子邮件,也在同时进行着;您一面开车、一面吹冷气、一面听音乐等都是“并行处理”的例子,JAVA程序语言当然也有这种能耐,即提供并行处理的机制。 JAVA的多线程支持体现在两个方面,第一,JAVA环境本身就是多线程的,它可以利用系统的空闲时间来执行诸如必要的垃圾清除和一般性的系统维护等操作;第二,JAVA还提供了对多线程的语言支持,利用多线程编程接口,编程人员可以很方便地写出支持多线程的应用程序,提高程序的执行效率。 必须注意的是,从JAVA语言规范可以看出,JAVA的多线程支持在某些环境中可能会受平台的限制,并且依赖于某些与平台相关的特性。比如说,如果操作系统本身不支持多线程,JAVA多线程就可能只是“受限”的或是不完全的多线程。 线程的生命周期内的状态 线程的生命周期是指线程从产生到结束的整个过程,在这个过程中线程通常会呈现以下的几种状态: 线程的相关概念 线程调度 JAVA提供一个线程调度器来监控程序启动后进入可运行状态的所有线程。线程调度器按照线程的优先级决定应调度哪些线程来执行。 线程调度器按线程的优先级高低,选择高优先级线程(进入运行状态)执行,同时线程调度又是抢先式调度,即如果在当前线程执行过程中,一个更高优先级的线程进入可运行状态,则这个拥有更高优先级的线程就立即被调度执行。 抢先式调度又分为:时间片方式和独占方式。 在时间片方式下,当前活动线程执行完当前时间片后,如果有其他处于就绪状态的相同优先级的线程,系统会将线程执行权交给其他可运行状态的同优先级的线程;当前活动线程就会转入等待执行队列中,等待下一个时间片的调度。 在独占方式下,当前活动线程一旦获得线程执行权,将一直执行下去,直到执行完毕或由于某种原因主动放弃CPU执行时间。否则不会让别的线程执行。 在下面几种情况下,当前活动线程会放弃正在占用的CPU: 线程被调用了yield()或sleep()方法主动放弃; 由于当前线程正在进行I/O访问、外存读写、等待用户输入等操作,并因此导致了线程阻塞;或者是在等候一个条件变量,或者线程被调用了wait()方法等情况; 在独占方式下,高优先级的线程执行完毕;在时间片方式下,线程的当前时间片用完,由同优先级的线程参与调度。 线程休眠 Thread类中包含了一个sleep(int)方法,它使当前线程进入等待状态,直到过了指定的时间后,或者是另一个线程对当前线程的Thread对象调用了interrupt()方法,从而中断了该线程。但是过了指定时间后,线程又将变成可运行的,并且会回到调度程序的可运行线程队列中。 线程被调用了yield()或sleep()方法后都会主动放弃正在占用的CPU,但是它们的执行过程会有如下的不同: 如果线程是由于调用了interrupt()方法而中断的,那么休眠的线程会抛出InterruptedException异常,这样线程就知道它是由于调用interrupt()方法而中断的,就不必查看计时器是否过期。然而,yield()方法和sleep() 方法都放弃正在占用的CPU,但yield()方法并不引起休眠,它只是暂停当前线程,这样其它线程就可以运行了。 线程的同步和死锁 当两个或多个线程需要访问同一共享资源时,为了保证数据的准确性,我们需要通过某种方式来确保资源在某一时刻只被一个线程使用,这种方式就是线程同步。 同步通常是通过监控器(Monitor)来实现,一个监控器是作为互斥排它锁(mutex)使用的一个对象,在给定时刻,只能有一个线程拥有该监控器。

文档评论(0)

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

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

1亿VIP精品文档

相关文档