线程的生命周期参考下图。

图片说明

我们可以通过调用线程的start()方法来启动一个线程,注意不要直接调用run()方法,否则系统会把线程对象当成一个普通对象,把run()方法当成一个普通方法,而不是线程执行体,并立即执行该方法,在run()方法返回之前其它线程无法并发执行。启动线程后线程处于就绪状态。

线程执行过程需要被中断,以便其它线程能够得到执行机会,线程之间的调度取决于平台的调度策略,所有现代的桌面和服务器都采用抢占式的调度策略,但一些小型设备如手机可能采用协作式的调度策略,在协作式机制下,只有线程调用sleep()或者yield()时才会主动放弃其所占用的资源。

线程在以下几种情况下可能会由运行状态变为阻塞状态:调用sleep()、调用wait()、IO阻塞、调用suspend()[容易导致死锁,尽量避免使用]、等待同步锁。

线程有执行结束或者出现异常会进入死亡状态,可以通过isAlive()方法进行判断。