Java线程的状态分析.docx_第1页
Java线程的状态分析.docx_第2页
Java线程的状态分析.docx_第3页
Java线程的状态分析.docx_第4页
Java线程的状态分析.docx_第5页
已阅读5页,还剩1页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

Java线程的状态分析Java线程的状态分析 在学习编程的过程中,我觉得不止要获得课本的知识,更多的是通过学习技术知识提高解决问题的能力,这样我们才能走在最前方,更多Java学习,请登陆疯狂java培训官网。 看别人写的博客,看jdk自己重复写了一次分析,显浅易懂的,至少比jdk的解析易懂得多。至于线程运行的状态图,网上大把大把的,自行google之。 具体的分析直接看代码的注释即可。 同时显浅地说明了yeild和join的理解 感觉那个中文jdk api参考手册就是机器翻译的 /* * 线程的状态分析 * author aa * */ public class ThreadState public static void main(String args) throws Exception /* * 新建线程,线程为新建状态 * jdk:至今尚未启动的线程的状态。 * 如果不给线程设置名称,线程的名称将会是:Thread-0,Thread-1。 */ ThreadDemo td = new ThreadDemo() ; System.out.println(新建状态: + td.getState() ; / 新建状态:NEW /* * 可运行状态:当线程有资格运行,调用start方法,线程首先进入可运行状态, * 可运行状态,不一定被线程调度程序运行, * 简单来说,调用start方法后,该线程依然是可运行状态,但未运行, * 存放在可运行池中, * 线程在运行的过程中,该线程的状态也是可运行状态 * * djk:可运行线程的线程状态。处于可运行状态的某一线程正在 Java 虚拟机中运行, * 但它可能正在等待操作系统中的其他资源,比如处理器。 */ td.start() ; System.out.println(可运行状态: + td.getState() ; / 可运行状态:RUNNABLE /* * Main线程休眠100毫秒时,td线程也就调用了waitForTwoSecond()方法, * 指定休眠2秒后,再回到可运行状态 * 指定等待一定时长时,休眠状态:TIMED_WAITING * jdk:具有指定等待时间的某一等待线程的线程状态。某一线程因为调用以下带有指定正等待时间的方法之一而处于定时等待状态: * 带有超时值的 Thread.sleep (sleep必须带值) * 带有超时值的 Object.wait * 带有超时值的 Thread.join */ Thread.sleep(100); System.out.println(休眠状态: + td.getState() ; / 具有指定等待时间的某一等待线程的线程状态。 /* * 这里Main线程一共休眠2100毫秒时,td线程调用了waitLong()方法, * 该方法调用了wait(),使线程处于一直等待的状态 * jdk:某一等待线程的线程状态。某一线程因为调用下列方法之一而处于等待状态: * 不带超时值的 Object.wait * 不带超时值的 Thread.join */ Thread.sleep(2000); System.out.println(等待状态: + td.getState() ; / 等待状态:WAITING errupt() ; /* * 这里输出的也可能是终止状态 * jdk:受阻塞并且正在等待监视器锁的某一线程的线程状态。处于受阻塞状态的某一线程正在等待监视器锁, * 以便进入一个同步的块/方法,或者在调用 Object.wait 之后再次进入同步的块/方法。 */ td.notifyWait() ; System.out.println(阻塞状态: + td.getState() ; /* * jdk:已终止线程的线程状态。线程已经结束执行。 */ Thread.sleep(1000); System.out.println(终止状态: + td.getState() ; /* * 可以简单归纳为:新建 , 可运行 , 运行 , 阻塞 , 死亡 * * Thread.yeild() 让当前运行的线程回到可运行状态,让出时间给其他线程运行,但可能没用 * jdk:暂停当前正在执行的线程对象,并执行其他线程。 */ /* * join()的用法 * jdk:等待该线程终止的时间最长为 millis 毫秒。超时为 0 意味着要一直等下去。 * 简单来说,如下,由于td线程被Main线程所启动,td线程调用join方法后, * 也就是Mian线程要等到td线程运行完毕才会执行join方法后面的代码, * jdk的解析在这里就是将Main线程加入到了td线程的后面 * join加参数,在这里意思就是Main线程需要等待2秒时间再继续执行join方法后面的代码, */ / td.join() ; / td.join(2000) ; System.out.println(线程加入join之后) ; private static class ThreadDemo extends Thread Override public void run() try / 测试join方法 / for (int i = 0; i 5; i+) / System.out.println(i); / sleep(1000) ; / waitForTwoSecond() ; waitLong() ; catch (Exception e) / TODO Auto-generated catch block e.printStackTrace(); public synchronized void waitForTwoSecond() throws Exception wait(2000) ;

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论