新建状态(NEW):当线程对象被创建时,它处于新建状态,此时系统已经为该线程分配了必要的资源,例如线程栈等。
就绪状态(READY):当线程已经准备好被调度执行,但是当前没有分配到 CPU 时间片时,它处于就绪状态。
运行状态(RUNNING):当线程被分配到 CPU 时间片并正在执行时,它处于运行状态。
阻塞状态(BLOCKED):当线程因为某些原因无法运行时,例如等待某个资源、等待 IO 完成等,它处于阻塞状态。如果调用 sleep()、 suspend()、 wait()等方法,线程都将进入堵塞状态
等待状态(WAITING):当线程因为某个条件而需要等待时,例如等待某个锁、等待某个信号量等,它处于等待状态。
终止状态(TERMINATED:):当线程执行完成或出现了异常而结束时,它处于消亡状态。
常见问题:
1、造成线程阻塞的方法?
阻塞线程的方法:join、yield、sleep 和Object的wait()方法
2、Java的守护进程(后台进程)?
设置线程为后台进程运行:setDaemon(true) 如果一个进程中只有后台线程在运行,这个进程就会结束。
3、造成线程阻塞后,线程回到哪个状态了?
通过join、yield、sleep造成线程阻塞后是回到了就绪状态
3、哪些状态之后是回到就绪状态?
a)通过join、yield、sleep造成线程阻塞后是回到了就绪状态
b)遇到synchronized后
c)遇到Object的等待wait方法后
4、sleep会释放锁吗?
sleep不会释放锁