Java线程的状态分析.doc
文本预览下载声明
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
td.interrupt() ;
/**
* 这里输出的也可能是终止状态
* jdk:受阻塞并且正在等待监视器锁的某一线程的线程状态。处于受阻塞状态的某一线程正在等待监视器锁,
* 以便进入一个同步的块/方法,或者在调用 Object.wait 之后再次进入同步的块/方法。
*/
td.notifyWait() ;
System.out.println(阻塞状态: + td.getState()) ;
/**
* jdk:已终止线程的线程状态。线程已经结束执行。
*/
Thread.sleep(1000);
System.out.println(终止状态: + td.getState()) ;
/**
* 可以简单归纳为:新建 , 可运行 , 运行 , 阻塞 , 死亡
*
* Thread.yeild() 让当前运行的线程回到可运行状态,让出时间给其他线程运行,但可能没用
* jdk:暂停当前正在执行的线程对象,并执行其他线程。
*/
/**
* join()的用法
*
显示全部