《java高级编程》PPT课件

《java高级编程》PPT课件

ID:36442912

大小:283.60 KB

页数:22页

时间:2019-05-09

《java高级编程》PPT课件_第1页
《java高级编程》PPT课件_第2页
《java高级编程》PPT课件_第3页
《java高级编程》PPT课件_第4页
《java高级编程》PPT课件_第5页
资源描述:

《《java高级编程》PPT课件》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、Java多线程Java线程模型理解线程概念进程的概念线程的概念线程与进程的区别和联系一个进程在其执行过程中,可以产生多个线程。在进程概念中,每一个进程的内部数据和状态都是完全独立的。但与进程不同的是,同类的多个线程是共享一块内存空间和一组系统资源,而线程本身的数据通常只有微处理器的寄存器数据,以及一个供程序执行时使用的堆栈。线程是比进程更小的执行单位,是进程内部独立的,有序的指令流。由此,一个进程能包含多个并发执行的线程。线程是一种能够独立运行的子任务。多线程是一种允许在程序中并发执行彼此间互相独立的多个线程机制。多

2、个线程的执行是并发的。多个线程之间的代码是乱序执行的,由此线程调度,同步等问题需要进行特殊处理。1.线程的生命周期线程的5种状态及转换方法新生态NowBron运行态Running可运行态Runnable阻塞态Blocked死亡态Deadsuspend()sleep()wait()resume()notify()start()yield()stop()stop()stop()1.新生状态当利用new运算符创建线程对象实例后,它仅仅作为一个对象实例存在,JVM没有为其分配CPU时间片等线程运行资源,该线程处于新生状态。2

3、.可运行状态在处于新生状态的线程中调用start()方法将线程的状态转换为可运行状态。这时,线程已经得到除CPU时间之外的其它系统资源,只等JVM的线程调度管理器按照线程的优先级对该线程进行调度,从而使该线程拥有能够获得CPU时间片的机会。3.运行状态JVM的线程调度管理器选中一个可运行状态线程,使其占有CPU并转换为运行状态。运行状态的线程执行自己的run()方法中的代码,直到调用其他方法而终止、或等待某资源而阻塞或完成任务而死亡。4.睡眠状态处于运行状态的线程在某些情况下,如执行了sleep()方法,或等待I/O

4、设备等资源,将让出CPU并暂时终止自己的运行,进入阻塞状态,也称为不可运行状态。处于阻塞状态的线程是不可执行的,即使CPU空闲,也不能执行。只有当引起阻塞的原因被消除时,线程转入可运行状态,重新进入线程队列中排队等待运行,再次运行时从原来终止处继续运行。5.死亡状态死亡状态是线程生命周期中的最后一个阶段。导致线程死亡的有2种情况:一是正常运行的线程完成了它的全部工作,这个任务完成的动作是由run()方法实现的;另一个是线程被强制性地终止,如通过执行stop()方法来终止一个线程。可以用isAlive()方法测试线程是

5、否已启动。如果isAlive()方法返回false,表示该线程是新创建或已被终止;如果返回true,表示该线程已启动且未被终止,是可运行状态、运行状态或阻塞状态之一,但不能作进一步的分辨。2.线程控制(1)start()方法start()方法对应于启动操作(2)stop()方法stop()方法终止在任何状态的线程,使之转入到死亡状态(3)sleep()方法sleep()方法使线程暂停运行一段固定的时间。在休眠时间内,由于线程不能得到CPU时间而不运行,指定的时间一过,线程重新进入可运行状态。publicstaticv

6、oidsleep(long millis)throwsInterruptedExceptionpublicstaticvoidsleep(long millis,int nanos)throwsInterruptedException(4)yield()方法yield()方法使得线程放弃当前分得的CPU时间,但是不使线程阻塞,即线程仍处于可运行状态,随时可能再次分得CPU时间(5)wait()方法wait()方法使得当前线程进入阻塞状态,直到被唤醒或等够了timeout指定的时间。注意:wait()等价于wait(0

7、),它使得线程永远等待直到被唤醒为止。publicfinalvoidwait(long timeout)throwsInterruptedExceptionpublicfinalvoidwait(long timeout,int nanos)throwsInterruptedExceptionpublicfinalvoidwait()throwsInterruptedException(6)notify()方法和notifyAll()方法notify()方法和notifyAll()方法对应于唤醒操作。(7)suspe

8、nd()方法和resume()方法suspend()方法和resume()方法配套使用,suspend()方法使得线程进入阻塞状态,并且不会自动恢复,必须其对应的resume()方法被调用,才能使得线程重新进入可执行状态。(8)interrupt()方法和interrupted()方法interrupt()方法为线程设置一个中断标记,以便于ru

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

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

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