Java程序案例教程(主编田智、杨艳慈 西安科大版)课件:第9章 多线程03.pptVIP

Java程序案例教程(主编田智、杨艳慈 西安科大版)课件:第9章 多线程03.ppt

  1. 1、本文档共18页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
 9.3 线?程?的?状?态   每个Java程序都有一个缺省的主线程。对于Java应用程序,主线程是main()方法执行的线索;对于Applet程序,主线程是指挥浏览器加载并执行Java Applet程序的线索。要想实现多线程,必须在主线程中创建新的线程对象。任何线程一般具有五种状态,即创建、就绪、运行、阻塞、终止。线程状态的转移与方法之间的关系可用图9-3来表示。 图9-3 线程的状态转换   1. 创建状态   在程序中用构造方法创建了一个线程对象后,新的线程对象便处于新建状态,此时它已经有了相应的内存空间和其他资源,但还处于不可运行状态。创建一个线程对象可采用线程构造方法来实现,如Thread thread=new Thread();。   2. 就绪状态   创建线程对象后,调用该线程的start()方法就可以启动线程。当线程启动时,线程进入就绪状态。此时,线程将进入线程队列排队,等待CPU服务,这表明它已经具备了运行 条件。   3. 运行状态   当就绪状态的线程被调用并获得处理器资源时,线程就进入了运行状态。此时,自动调用该线程对象的run()方法。run()方法定义了该线程的操作和功能。   4. 阻塞状态   一个正在执行的线程在某些特殊情况下,如被人为挂起或需要执行耗时的输入/输出操作时,将让出CPU并暂时中止自己的执行,进入阻塞状态。在可执行状态下,如果调用sleep()、suspend()、wait()等方法,线程都将进入阻塞状态。阻塞时,线程不能进入排队队列,只有当引起阻塞的原因被消除后,线程才可以转入就绪状态。   5. 终止状态   线程调用stop()方法时或run()方法执行结束后,线程即处于终止状态。处于终止状态的线程不具有继续运行的能力。 9.4 线程操作的一些方法   在Java实现多线程的程序中,虽然Thread类实现了Runnable 接口,但是操作线程的主要方法并不在Runnable接口中,而是在Thread类中。表9-1列出了Thread类中的主要方法。 9.4.1 取得和设置线程的名称   在Thread类中,可以通过getName()方法取得线程的名称,通过setName()方法设置线程的名称。线程的名称一般在启动线程前设置,但也允许为已经运行的线程设置名称。允许两个Thread对象有相同的名字,但为了清晰,应该尽量避免这种情况的发生。   另外,如果程序并没有为线程指定名称,则系统会自动为线程分配一个名称。   【例9-7】 GetNameThreadDemo.java。   程序说明:   (1) 第1行声明一个GetNameThreadDemo类,此类继承自Thread类,之后3~7行复写Thread类中的run()方法。   (2) 第8~14行声明一个printMsg()方法,此方法用于取得当前线程的信息。在第11行,通过Thread类中的currentThread()方法,返回一个Thread类的实例化对象。由表9-1可知,此方法返回当前正在运行的线程,即返回正在调用此方法的线程。第12行通过调用Thread类中的getName()方法,返回当前运行线程的名称。   (3) 第6行和第21行分别调用了printMsg()方法,但第6行从多线程的run()方法中调用,而第21行从main()方法中调用。   为什么程序中输出的运行线程的名称中会有一个main呢?这是因为main()方法也是一个线程,实际上在命令行中运行Java命令时,就启动了一个JVM的进程,默认情况下此进程会产生两个线程:一个是main()方法线程,另外一个就是垃圾回收(GC)线程。   下例介绍如何在线程中设置线程的名称。   【例9-8】 SetNameThreadDemo.java。 表 9-1 Thread类中的主要方法

您可能关注的文档

文档评论(0)

小教资源库 + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档