jAVA2程序设计基础第十一章.ppt

  1. 1、本文档共23页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第11章 多 线 程 * * /webnew/ 教学提示:在同时处理多个任务的应用中,多线程的意义显得尤其重要,本章将介绍多线程的内容,主要包括线程的概念 、线程的创建、线程间的同步与通信,以及线程的生命周期和状态控制 ,并说明使用多线程时应该注意的问题。学习完本章之后,读者将对Java多线程机制有一个全面的了解。 教学目标:理解线程的概念,熟练掌握线程的创建、线程间的同步与通信,以及线程的生命周期和状态控制 ,并牢记使用多线程时应该注意的问题。 11.1 线程的概念 在介绍线程前有必要简要介绍一下进程,这将有助于读者理解线程概念。相信大多数读者都知道,在Windows操作系统中可以同时执行多个程序,比如打开一个资源管理器和多个 IE 浏览器 ,同时使用播放器播放音乐 , 后台可能同时还有杀毒软件防火墙在运行 ,这里的每一个运行的程序都是一个进程 。 严格地说 ,这种说法是不准确的。程序一般是指保存在外部存储器(一般为硬盘)中的代码文件 ,当程序被执行时 ,系统会先在内存中为其分配一块空间 ,再把其代码复制到该空间 中执行 , 这个在由系统分配的内存空间中执行的程序才是进程 。一个程序可能同时存在多个相应的进程 ,如同时打开多个IE浏览器 ,每一个浏览器窗口都是一个进程 ,都拥有自己独立的内存空间,而它们都来自于同一个程序。 11.2 线程的创建 对于一个用Java编写的进程来说,在Java虚拟机启动之初,会且只会产生一个独一的非守护线程(守护线程将在稍后介绍),具有代表性的是类中静态方法main()产生的线程,该线程为主线程,可以创建和控制其他线程。 11.2.1 继承自类Thread 11.2.2 实现接口Runnable 11.2.3 两种创建线程方式的对比 11.2.4 守护线程Daemon 11.2.1 继承自类Thread 类Thread位于java.lang包中,由于java.lang包被自动包含入每个Java文件中,所以可以直接使用类Thread而无需编写import语句。 返回 11.2.2 实现接口Runnable Runnable接口非常简单,其全貌如下: public interface Runnable{ void run(); } 返回 11.2.3 两种创建线程方式的对比 Thread是Java已经严格封装好了的类,在面向对象思想中 ,继承这样的类并修改或扩充它不是十分可取的 。 因为可能会出现人为失误,对一个类进行继承修改或扩充,将可能导致该子类出现不可预料的错误。 返回 11.2.4 守护线程Daemon 线程分为用户线程和守护线程两种。用户线程即一般线程,守护线程是具有如下特性的线程:它会在所有用户线程 (即非守护线程) 结束之后立即被Java虚拟机结束,而不管其是否已执行完毕,从而结束整个进程。守护线程往往处于无限循环中,用于监听其他线程(一般是用户线程 , 也可以是其他守护线程)的运行 , 并提供某种通用性的服务,典型的如Internet中收发E-mail邮件的服务。 通过线程对象的 isDaemon ( ) 方法可以判断该线程是否为守护线程,通过setDaemon()方法可以改变该线程的类型——setDaemon(false)将线程改为用户线程,setDaemon(true)将线程改为守护线程。该方法必须在调用线程的start()方法前调用才有效 ,否则线程将为默认的线程类型——由用户线程创建的线程默认为用户线程,由守护线程创建的线程默认为守护线程,main()方法产生的主线程始终为用户线程。 返回 11.3 线程的同步 在单线程的进程中,一个进程一次只能执行一个任务,一次只能使用一个资源,不需要考虑两个或更多个任务同时试图使用同一个资源的问题,如两个任务同时修改同一个数据,或同时进行打印操作而只有一台打印机。然而在多线程环境下,这种多个线程试图同时使用相同且有限的资源的情况,是很有可能发生的,若不提供某种机制避免这种情况的出现,后果将可能是非常严重且不可预料的,如造成某些线程数据的不一致,使某些线程陷入无限循环永远无法退出,破坏某些关键文件或数据库中的重要数据。 11.3.1 资源冲突 11.3.2 同步机制 11.3.3 同步效率 11.3.1 资源冲突 这是一段完整可编译的代码,提供了reduceMainData()方法用于递减私有的主数据,在run()方法中保存主数据与打印主数据之前进行了多达1 024 000

文档评论(0)

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

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

1亿VIP精品文档

相关文档