java程序设计课件2012版JAVA_chap8_线程.ppt

java程序设计课件2012版JAVA_chap8_线程.ppt

ID:51963896

大小:67.50 KB

页数:14页

时间:2020-03-26

java程序设计课件2012版JAVA_chap8_线程.ppt_第1页
java程序设计课件2012版JAVA_chap8_线程.ppt_第2页
java程序设计课件2012版JAVA_chap8_线程.ppt_第3页
java程序设计课件2012版JAVA_chap8_线程.ppt_第4页
java程序设计课件2012版JAVA_chap8_线程.ppt_第5页
资源描述:

《java程序设计课件2012版JAVA_chap8_线程.ppt》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、第8章线程程序是一段静态的代码,是应用软件执行的蓝本进程是程序的一次动态执行过程,对应了从代码加载、执行到执行完毕的一个完整过程。作为蓝本的同一段程序,可以被多次加载到系统的不同内存区域分别执行,形成不同进程线程是比进程更小的执行单位,一个进程在执行过程中,可以产生多个线程,形成多条执行线索。每条线索,即每个线程也有它自身的产生、存在和消亡的过程,也是一个动态的概念每个进程都有一段专用的内存区域,线程间可以共享内存,实现数据交换、实时通信和必要的同步操作一个进程中同时运行的多个线程可以类比为一个计算机上同时运行的多个进程:对于前者,各线程共享地址空间、打开的文件以及其他资源,只有堆栈

2、和寄存器数据是独立的;对于后者,各进程共享物理内存、磁盘、打印机以及其他资源,但存储空间相互独立进程有单线程进程和多线程进程之分线程有时也称为轻量级(linghtweight)进程多线程是把多任务的原理应用到程序更底一层中进一步发展了这一原理进程有一组完整的属于自己的变量,而同一进程中不同线程共享这些数据创建和注销单个线程比进程所需的开销少得多与线程间的通信相比,进程间通信慢得多,要求也较高当调用java解释器启动一个应用时,首先是创建了一个进程,该进程中首先创建主线程;如果在另外一个命令窗口中调用java解释器启动另一个应用时,又创建了一个进程,该进程中仍然首先创建主线程……有效利

3、用线程可以提高软件的执行效率Java语言对线程提供了方便的支持每天工商银行开始营业可以认为一个进程启动了,停止营业时该进程结束了;交通银行、农业银行也类似,都是不同的进程,各银行间有独立的数据库,跨行间业务虽可以进行,但相对困难工商银行所属的各分理处上的出纳柜台可以认为是该进程中的线程,各出纳柜台共享数据库,在不同分理处(或不同柜台)可以方便开展业务线程的管理和调度是难点和关键8.1线程的创建每个java程序都有一个缺省的主线程,对于Application,主线程是main()方法执行的线索;对于Applet,主线程指挥浏览器加载并执行小程序Java使用Thread类及其子类的对象来

4、表示线程,要实现多线程,必须在主线程中创建新的线程对象线程生命周期中的五种状态:新建:创建时的状态,此时线程对象已经有了相应的内存空间和其它资源,并已被初始化线程生命周期中的五种状态:续就绪:调用start()方法后,进入线程对列排队等待CPU时间片,一旦轮到它来享用CPU资源时,就脱离创建它的主线程独立开始自己的生命周期;另外由原来处于阻塞状态的线程被解除阻塞后也进入就绪状态运行:就绪状态的线程被调度并获得处理器资源时,进入运行状态。每个线程对象都有一个run()方法,当线程对象被调度执行时,将自动调用本对象的run()方法线程生命周期中的五种状态:续阻塞:一个正在执行的线程在某些

5、特殊情况下,例如被认为挂起或需要执行费时的输入输出操作时,将让出CPU并暂时终止自己的执行,进入阻塞状态。阻塞时它不能进入排队队列,只有当引起阻塞的原因被消除时,线程才能转入就绪状态,重新线程队列中排队等待CPU资源,以便从原来终止处开始继续执行死亡:处于死亡状态的线程不具有继续运行的能力。死亡原因有两个,即run()方法正常结束或提前强制性地终止,如执行stop()或destroy()方法线程调度依据优先级基础上的“先到先服务”原则新建就绪阻塞运行死亡线程的行为和功能体现在run()方法中,而Thread类中定义的run()方法什么也不做,因此直接用Thread类创建线程意义不大。

6、创建有意义的线程对象关键是使其具有合适的、能被系统识别的run()方法(publicvoid)。一种方法是由Thread类派生子类,在该子类中改写run()方法,由该子类便可创建有意义的线程对象。java.lang包中除了有Thread类以外,还有一个接口Runnable,该接口中声明了一个run()方法,创建有意义的线程对象的另一种方法是,首先在一个实现了Runnable接口的类中定义新的run()方法,并利用该实现类创建一个对象,然后在创建线程对象时,把该实现类对象作为调用Thread类构造器的参数,系统会用该实现类对象的run()方法覆盖新创建线程对象的run()方法。线程的主

7、要方法:启动线程的start()方法定义线程操作的run()方法使线程暂时休眠的sleep()方法判断线程是否未消亡的isAlive()方法:在调用stop()方法终止一个线程之前,最好先用该方法检查一下该线程是否存活,杀死不存在线程可能会造成系统错误。P220例,p222例8.2同步当两个线程需要同时操作同一对象时,可能会由于夹插操作而破坏数据。在多线程机制中,是通过给对象加锁来解决的。当某个对象被一个线程上锁后,仅有该线程能够访问该对象。8.2.1同步

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

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

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