线程:
线程的生命周期:新建(new)、就绪(runnable)、运行(running)、阻塞(blocked)、和死亡(Dead)
当程序使用new关键字创建一个线程后,该线程处于新建状态,此时他和其他java 对象一样,仅仅由java虚拟机为其分配了内存,并初始化了其成员变量的值。此时的线程对象没
有表现出任何线程的动态特征,程序也不会执行线程执行体中的线程执行体。。
当线程对象调用了start()方法之后,该线程处于就绪状态,java虚拟机会为其创建方法调用栈和程序计数器,处于这个状态中的线程并没有开始运行,他只是表示该线程可以运行了。至于该线程何时开始运行,取决于JVM里线程调度器的调度。
对处于启动状态的线程再次调用start方法,会引发IllegalThreadState Exception异常。。
线程进入阻塞状态的情况:
1、线程调用sleep方法主动放弃所占用的处理器资源。。
2、线程调用了一个阻塞式IO方法,在该方法返回之前,该线程被阻塞。。
3、线程试图获得一个同步监视器但该同步监视但该同步监视器正在被其他线程所持有。
4、线程正在等待某个通知(notify)。
5、程序调用了线程的suspend方法将该线程挂起。不过这个方法容易导致死锁,程序应该尽量避免使用该方法。。
被阻塞的线程再合适时候会从新进入就绪状态,。被阻塞线程阻塞解除后必须重新等待线程调度器再次调度它。。
可以解除上面阻塞让该线程重新进入就绪状态情况:
1、调用sleep方法的线程经过了指定时间。
2、线程调用的IO方法已经返回。
3、线程成功获得了试图取得同步监视器。。
4、线程正在等待某个通知时,其他线程发出了一个通知。
5、处于关起状态的线程被调用了resume恢复方法。。