欢迎来到天天文库
浏览记录
ID:14991277
大小:29.00 KB
页数:6页
时间:2018-07-31
《java线程的状态分析》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、Java线程的状态分析Java线程的状态分析在学习编程的过程中,我觉得不止要获得课本的知识,更多的是通过学习技术知识提高解决问题的能力,这样我们才能走在最前方,更多Java学习,请登陆疯狂java培训官网。看别人写的博客,看jdk自己重复写了一次分析,显浅易懂的,至少比jdk的解析易懂得多。至于线程运行的状态图,网上大把大把的,自行google之。具体的分析直接看代码的注释即可。。。。。同时显浅地说明了yeild和join的理解感觉那个中文jdkapi参考手册就是机器翻译的/***线程的状态分析*@authoraa**/publicclassThreadS
2、tate{publicstaticvoidmain(String[]args)throwsException{/***新建线程,线程为新建状态*jdk:至今尚未启动的线程的状态。*如果不给线程设置名称,线程的名称将会是:Thread-0,Thread-1。。。。。*/ThreadDemotd=newThreadDemo();System.out.println("新建状态:"+td.getState());//新建状态:NEW/***可运行状态:当线程有资格运行,调用start方法,线程首先进入可运行状态,*可运行状态,不一定被线程调度程序运行,*简单来说
3、,调用start方法后,该线程依然是可运行状态,但未运行,*存放在可运行池中,*线程在运行的过程中,该线程的状态也是可运行状态**djk:可运行线程的线程状态。处于可运行状态的某一线程正在Java虚拟机中运行,*但它可能正在等待操作系统中的其他资源,比如处理器。*/td.start();System.out.println("可运行状态:"+td.getState());//可运行状态:RUNNABLE/***Main线程休眠100毫秒时,td线程也就调用了waitForTwoSecond()方法,*指定休眠2秒后,再回到可运行状态*指定等待一定时长时,休
4、眠状态:TIMED_WAITING*jdk:具有指定等待时间的某一等待线程的线程状态。某一线程因为调用以下带有指定正等待时间的方法之一而处于定时等待状态:*带有超时值的Thread.sleep(sleep必须带值)*带有超时值的Object.wait*带有超时值的Thread.join*/Thread.sleep(100);System.out.println("休眠状态:"+td.getState());//具有指定等待时间的某一等待线程的线程状态。/***这里Main线程一共休眠2100毫秒时,td线程调用了waitLong()方法,*该方法调用了wa
5、it(),使线程处于一直等待的状态*jdk:某一等待线程的线程状态。某一线程因为调用下列方法之一而处于等待状态:*不带超时值的Object.wait*不带超时值的Thread.join*/Thread.sleep(2000);System.out.println("等待状态:"+td.getState());//等待状态:WAITINGtd.interrupt();/***这里输出的也可能是终止状态*jdk:受阻塞并且正在等待监视器锁的某一线程的线程状态。处于受阻塞状态的某一线程正在等待监视器锁,*以便进入一个同步的块/方法,或者在调用Object.wai
6、t之后再次进入同步的块/方法。*/td.notifyWait();System.out.println("阻塞状态:"+td.getState());/***jdk:已终止线程的线程状态。线程已经结束执行。*/Thread.sleep(1000);System.out.println("终止状态:"+td.getState());/***可以简单归纳为:新建,可运行,运行,阻塞,死亡**Thread.yeild()让当前运行的线程回到可运行状态,让出时间给其他线程运行,但可能没用*jdk:暂停当前正在执行的线程对象,并执行其他线程。*//***join()
7、的用法*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之后");}privatestaticclassT
8、hreadDemoextendsThread{@Overridep
此文档下载收益归作者所有