线程的生命周期
目录
1. 分为5个阶段
1.1 新建
就是刚使用new方法,new出来的线程
1.2 就绪
就是调用的线程的start()方法后,这时候线程处于等待CPU分配资源阶段,谁先抢的CPU资源,谁开始执行,出于可运行状态,因为没有获取到cpu片段,还没有真正运行;
1.3 运行
当就绪的线程被调度并获得CPU资源时,便进入运行状态,run方法定义了线程的操作和功能;;
1.4 阻塞
在运行状态的时候,可能因为某些原因导致运行状态的线程变成了阻塞状态,比如sleep()、wait()之后线程就处于了阻塞状态,这个时候需要其他机制将处于阻塞状态的线程唤醒,比如调用notify或者notifyAll()方法。唤醒的线程不会立刻执行run方法,它们要再次等待CPU分配资源进入运行状态;
1.4 销毁
如果线程正常执行完毕后或线程被提前强制性的终止或出现异常导致结束,那么线程就要被销毁,释放资源;
2. 常用方法
2.1 getPriority
getPriority():获取当前线程的优先级
2.2 setPriority
setPriority():设置当前线程的优先级
>注意:线程优先级高,被CPU调度的概率大,但不代表一定会运行,还有小概率运行优先级低的线程。
2.3 isAlive
isAlive():判断线程是否处于活动状态 (线程调用start后,即处于活动状态)
2.4 join
join():调用join方法的线程强制执行,其他线程处于阻塞状态,等该线程执行完后,其他线程再执行。有可能被外界中断产生InterruptedException 中断异常。
2.5 sleep
sleep():在指定的毫秒数内让当前正在执行的线程休眠(暂停执行)。休眠的线程进入阻塞状态。不会让出cpu
2.6 yield
yield():调用yield方法的线程,会礼让其他线程先运行。(大概率其他线程先运行,小概率自己还会运行)
2.7 wait
wait():导致线程等待,进入堵塞状态。该方法要在同步方法或者同步代码块中才使用的,让出cpu
2.8 notify
notify():唤醒当前线程,进入运行状态。该方法要在同步方法或者同步代码块中才使用的
2.8 notifyAll
notifyAll():唤醒所有等待的线程。该方法要在同步方法或者同步代码块中才使用的