程序设计基础第十一章ppt课件

程序设计基础第十一章ppt课件

ID:20665790

大小:379.00 KB

页数:23页

时间:2018-10-14

程序设计基础第十一章ppt课件_第1页
程序设计基础第十一章ppt课件_第2页
程序设计基础第十一章ppt课件_第3页
程序设计基础第十一章ppt课件_第4页
程序设计基础第十一章ppt课件_第5页
资源描述:

《程序设计基础第十一章ppt课件》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、第11章多线程教学提示:在同时处理多个任务的应用中,多线程的意义显得尤其重要,本章将介绍多线程的内容,主要包括线程的概念、线程的创建、线程间的同步与通信,以及线程的生命周期和状态控制,并说明使用多线程时应该注意的问题。学习完本章之后,读者将对Java多线程机制有一个全面的了解。教学目标:理解线程的概念,熟练掌握线程的创建、线程间的同步与通信,以及线程的生命周期和状态控制,并牢记使用多线程时应该注意的问题。11.1线程的概念在介绍线程前有必要简要介绍一下进程,这将有助于读者理解线程概念。相信大多数读者都知道,在Windows操作系统中可以同时执行多个程序,比

2、如打开一个资源管理器和多个IE浏览器,同时使用播放器播放音乐,后台可能同时还有杀毒软件防火墙在运行,这里的每一个运行的程序都是一个进程。严格地说,这种说法是不准确的。程序一般是指保存在外部存储器(一般为硬盘)中的代码文件,当程序被执行时,系统会先在内存中为其分配一块空间,再把其代码复制到该空间中执行,这个在由系统分配的内存空间中执行的程序才是进程。一个程序可能同时存在多个相应的进程,如同时打开多个IE浏览器,每一个浏览器窗口都是一个进程,都拥有自己独立的内存空间,而它们都来自于同一个程序。11.2线程的创建对于一个用Java编写的进程来说,在Java虚拟机

3、启动之初,会且只会产生一个独一的非守护线程(守护线程将在稍后介绍),具有代表性的是类中静态方法main()产生的线程,该线程为主线程,可以创建和控制其他线程。11.2.1继承自类Thread11.2.2实现接口Runnable11.2.3两种创建线程方式的对比11.2.4守护线程Daemon11.2.1继承自类Thread类Thread位于java.lang包中,由于java.lang包被自动包含入每个Java文件中,所以可以直接使用类Thread而无需编写import语句。返回11.2.2实现接口RunnableRunnable接口非常简单,其全貌如下:

4、publicinterfaceRunnable{voidrun();}返回11.2.3两种创建线程方式的对比Thread是Java已经严格封装好了的类,在面向对象思想中,继承这样的类并修改或扩充它不是十分可取的。因为可能会出现人为失误,对一个类进行继承修改或扩充,将可能导致该子类出现不可预料的错误。返回11.2.4守护线程Daemon线程分为用户线程和守护线程两种。用户线程即一般线程,守护线程是具有如下特性的线程:它会在所有用户线程(即非守护线程)结束之后立即被Java虚拟机结束,而不管其是否已执行完毕,从而结束整个进程。守护线程往往处于无限循环中,用于监

5、听其他线程(一般是用户线程,也可以是其他守护线程)的运行,并提供某种通用性的服务,典型的如Internet中收发E-mail邮件的服务。通过线程对象的isDaemon()方法可以判断该线程是否为守护线程,通过setDaemon()方法可以改变该线程的类型——setDaemon(false)将线程改为用户线程,setDaemon(true)将线程改为守护线程。该方法必须在调用线程的start()方法前调用才有效,否则线程将为默认的线程类型——由用户线程创建的线程默认为用户线程,由守护线程创建的线程默认为守护线程,main()方法产生的主线程始终为用户线程。返

6、回11.3线程的同步在单线程的进程中,一个进程一次只能执行一个任务,一次只能使用一个资源,不需要考虑两个或更多个任务同时试图使用同一个资源的问题,如两个任务同时修改同一个数据,或同时进行打印操作而只有一台打印机。然而在多线程环境下,这种多个线程试图同时使用相同且有限的资源的情况,是很有可能发生的,若不提供某种机制避免这种情况的出现,后果将可能是非常严重且不可预料的,如造成某些线程数据的不一致,使某些线程陷入无限循环永远无法退出,破坏某些关键文件或数据库中的重要数据。11.3.1资源冲突11.3.2同步机制11.3.3同步效率11.3.1资源冲突这是一段完整

7、可编译的代码,提供了reduceMainData()方法用于递减私有的主数据,在run()方法中保存主数据与打印主数据之前进行了多达1024000次的浮点运算用于延缓线程运行,这将使得该线程在此处很可能被暂停。此时若main()主线程被调度到CPU执行,它很可能会递减该线程的主数据,从而造成打印时主数据与备份数据的不一致。返回11.3.2同步机制我们永远无法知道线程什么时候开始执行(并不是在创建它的时刻,它便开始执行的),也无法知道它什么时候会被暂停,更加无从得知在暂停期间其他线程会对它进行怎样的访问控制,这是多线程环境下线程的根本性质。由此产生的资源冲突

8、问题是代码编写者必须考虑的,至少在重要的时刻必须避免关键资源的冲突

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。