java高级编程2课件.ppt
- 【下载声明】
1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
3. 本页资料《java高级编程2课件.ppt》由用户(三亚风情)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- java 高级 编程 课件
- 资源描述:
-
1、Java多线程多线程第1页,共22页。Java 线程模型v理解线程概念 进程的概念线程的概念线程与进程的区别和联系v一个进程在其执行过程中,可以产生多个线程。v在进程概念中,每一个进程的内部数据和状态都是完全独立的。但与进程不同的是,同类的多个线程是共享一块内存空间和一组系统资源,而线程本身的数据通常只有微处理器的寄存器数据,以及一个供程序执行时使用的堆栈。第2页,共22页。v线程是比进程更小的执行单位,是进程内部独立的,有序的指令流。由此,一个进程能包含多个并发执行的线程。线程是一种能够独立运行的子任务。v多线程是一种允许在程序中并发执行彼此间互相独立的多个线程机制。v多个线程的执行是并发的
2、。v多个线程之间的代码是乱序执行的,由此线程调度,同步等问题需要进行特殊处理。第3页,共22页。1.线程的生命周期线程的5种状态及转换方法 新生态Now Bron运行态Running可运行态Runnable阻塞态Blocked死亡态Deadsuspend()sleep()wait()resume()notify()start()yield()stop()stop()stop()第4页,共22页。1.新生状态新生状态v当利用new运算符创建线程对象实例后,它仅仅作为一个对象实例存在,JVM没有为其分配CPU时间片等线程运行资源,该线程处于新生状态。2.可运行状态可运行状态v在处于新生状态的线程中
3、调用start()方法将线程的状态转换为可运行状态。这时,线程已经得到除CPU时间之外的其它系统资源,只等JVM的线程调度管理器按照线程的优先级对该线程进行调度,从而使该线程拥有能够获得CPU时间片的机会。3.运行状态运行状态vJVM的线程调度管理器选中一个可运行状态线程,使其占有CPU并转换为运行状态。运行状态的线程执行自己的run()方法中的代码,直到调用其他方法而终止、或等待某资源而阻塞或完成任务而死亡。第5页,共22页。4.睡眠状态睡眠状态v处于运行状态的线程在某些情况下,如执行了sleep()方法,或等待I/O设备等资源,将让出CPU并暂时终止自己的运行,进入阻塞状态,也称为不可运行
4、状态。v处于阻塞状态的线程是不可执行的,即使CPU空闲,也不能执行。只有当引起阻塞的原因被消除时,线程转入可运行状态,重新进入线程队列中排队等待运行,再次运行时从原来终止处继续运行。5.死亡状态死亡状态v死亡状态是线程生命周期中的最后一个阶段。导致线程死亡的有2种情况:一是正常运行的线程完成了它的全部工作,这个任务完成的动作是由run()方法实现的;另一个是线程被强制性地终止,如通过执行stop()方法来终止一个线程。v可以用isAlive()方法测试线程是否已启动。如果isAlive()方法返回false,表示该线程是新创建或已被终止;如果返回true,表示该线程已启动且未被终止,是可运行状
5、态、运行状态或阻塞状态之一,但不能作进一步的分辨。第6页,共22页。2.线程控制(1)start()方法vstart()方法对应于启动操作(2)stop()方法vstop()方法终止在任何状态的线程,使之转入到死亡状态(3)sleep()方法vsleep()方法使线程暂停运行一段固定的时间。在休眠时间内,由于线程不能得到CPU 时间而不运行,指定的时间一过,线程重新进入可运行状态。vpublic static void sleep(long millis)throws InterruptedExceptionvpublic static void sleep(long millis,int n
6、anos)throws InterruptedException(4)yield()方法vyield()方法使得线程放弃当前分得的CPU时间,但是不使线程阻塞,即线程仍处于可运行状态,随时可能再次分得CPU时间 第7页,共22页。(5)wait()方法vwait()方法使得当前线程进入阻塞状态,直到被唤醒或等够了timeout指定的时间。注意:wait()等价于wait(0),它使得线程永远等待直到被唤醒为止。vpublic final void wait(long timeout)throws InterruptedExceptionvpublic final void wait(long
7、timeout,int nanos)throws InterruptedExceptionvpublic final void wait()throws InterruptedException(6)notify()方法和notifyAll()方法vnotify()方法和notifyAll()方法对应于唤醒操作。(7)suspend()方法和resume()方法vsuspend()方法和resume()方法配套使用,suspend()方法使得线程进入阻塞状态,并且不会自动恢复,必须其对应的resume()方法被调用,才能使得线程重新进入可执行状态。第8页,共22页。(8)interrupt()
8、方法和interrupted()方法 interrupt()方法为线程设置一个中断标记,以便于run()方法运行时使用isInterrupted()方法能够检测到,此时,线程在sleep()之类的方法中被阻塞时,由sleep()方法抛出一个InterruptedException异常,然后捕获这个异常以处理超时。(9)isAlive()方法 isAlive()方法用来判断一个线程的run()方法是否还在执行,如果是在运行,则返回true,否则返回false。第9页,共22页。3.线程的创建v在Java中创建线程的方法有2种:一是通过创建Thread类的子类来实现,二是通过实现Runnable接
展开阅读全文