网页设计与网站建设的报告,制作宣传图片的软件app,如何用网站做招聘,大型网站设计目录
一、线程的状态
1. NEW
2. TERMINATED
3. RUNNABLE
4. TIMED_WAITING
5. BLOCKED
6. WAITING
二、线程状态转换
1. 线程状态转换简图 一、线程的状态 线程的状态一共有 6 种#xff1a;
NEW#xff1a;安排了工作#xff0c;还未开始行动#xff08;调用 st…目录
一、线程的状态
1. NEW
2. TERMINATED
3. RUNNABLE
4. TIMED_WAITING
5. BLOCKED
6. WAITING
二、线程状态转换
1. 线程状态转换简图 一、线程的状态 线程的状态一共有 6 种
NEW安排了工作还未开始行动调用 start 方法之前。RUNNABLE可工作的。又可分为正在工作中和即将开始工作。BLOCKED表示排队等着其他事情。同步阻塞因为资源竞争而引起的阻塞锁WAITING表示排队等着其他事情。等待阻塞需要其他线程唤醒TIMED_WAITING表示排队等着其他事情。计时等待阻塞只等待一定的时间TERMINATED工作完成了。
1. NEW 把 Thread 对象创建好了但是还没有调用 start。 public static void main(String[] args) {Thread t new Thread(() - {});System.out.println(t.getState()); //输出 NEW}
2. TERMINATED 操作系统中的线程已经执行完毕销毁了但是 Thread 对象还在时获取到的状态就是TERMINATED。 public static void main(String[] args) throws InterruptedException {Thread t new Thread(() - {});t.start();Thread.sleep(1000);System.out.println(t.getState()); //输出 TERMINATED }
3. RUNNABLE 就绪状态处于这个状态的线程就是在就绪队列中。即随时可以被调度到 CPU上。如果代码中没有进行 sleep 也没有进行其他的可能导致阻塞的操作代码大概率是处在 RUNNABLE 状态。 public static void main(String[] args) throws InterruptedException {Thread t new Thread(() - {while(true) {//这里什么都不能有}});t.start();Thread.sleep(1000);System.out.println(t.getState()); //输出 RUNNABLE} 上述代码中t 线程里一直持续不断的执行循环随时系统向调度它上 CPU 都是可以的。
4. TIMED_WAITING 代码中调度了 sleep或者join(超时时间) 就会进入 TIMED_WAITING 状态。意思就是当前的线程在一定时间之内是阻塞状态。一定时间结束后阻塞状态解除。 public static void main(String[] args) throws InterruptedException {Thread t new Thread(() - {while(true) {try {Thread.sleep(1000);} catch (InterruptedException e) {e.printStackTrace();}}});t.start();Thread.sleep(1000);System.out.println(t.getState()); //输出 TIMED_WAITING} 上述代码中因为 t 线程循环内部只有 sleep 方法所以该线程大概率一直处在 sleep 中因此获取 t 线程状态显示 TIMED_WAITING。
5. BLOCKED 当前线程在等待锁导致了阻塞阻塞状态之一。使用 sychronized 时候可能会出现该状态。
6. WAITING 当前线程在等待唤醒导致了阻塞阻塞状态之一。使用 wait 时候可能会出现该状态。
二、线程状态转换
1. 线程状态转换简图