一,线程的五大状态
线程从创建,运行到结束大致处于五个状态。新建状态,就绪状态,运行状态,阻塞状态,死亡状态。
1:新建状态(New),新建一个线程 new Thread();
2:就绪状态(Runnable),线程对象被创建后,其它线程调用了该对象的start()方法。该状态的线程位于可运行线程池中,等待获取cpu使用权。
3:运行状态(Running),就绪状态的线程获得cpu使用权,执行代码。
4:阻塞状态(Blocked),线程由于某种原因放弃cpu使用权,暂时停止运行,直到线程回到就绪状态才有机会转到运行状态。
阻塞的三种情况
(1)等待阻塞 wait ,运行中的线程调用wait()方法,JVM会把该线程放到等待池中。
(2)同步阻塞synchronized,运行线程在获取同步锁时,该同步锁正在被线程B占用,JVM会把该线程放到锁池中,等到线程B释放同步锁时,该线程才有机会获取同步锁。
(3)其它阻塞,运行的线程执行sleep()或join()方法,或者发出I/O请求时候。JVM会把该线程设置为阻塞状态。等到sleep()或join()超时或者发出的I/O请求结束时候,JVM会把该线程重新为就绪状态
5:死亡状态(Dead),线程执行结束或者异常退出后,该线程的生命周期就结束了。
线程状态流程图
二,初步认识线程常用API,下一篇中会进行详解
currentThread():返回正在调用的线程信息
isAlive():判断当前线程是否处于活动状态
sleep():指定毫秒数内让正在执行的线程休眠,暂停执行 Thread.sleep(2000);
getId():取得线程的唯一标识
interrupt():当前线程做一个停止的标记
isInterrupted():判断线程是否已经中断
stop():暴力停止线程
suspend():暂停线程
resume():恢复线程运行
yieId():放弃该线程当前的CPU资源
join():指定的线程加入到当前线程
wait():线程等待,使当前线程主动释放互斥锁,并进入该互斥锁的等待队列
notify():唤醒等待的线程
notifyAll():唤醒所有等待的线程
start():本质的功能是从CPU申请另一个线程空间来执行run()方法中的代码,它和当前线程是两条线程,在相对独立的线程空间运行。