乐趣区

关于java:线程状态

1. 线程状态概述

线程有以下 6 种状态:NEW(新建 )、Runnable( 可运行 )、Blocked( 锁阻塞 )、Waiting( 有限期待 )、TimedWaiting( 计时期待 )、Teminated( 被终止)。


2.Timed Waiting(计时期待)

同 waiting 状态,有几个办法有超时参数,调用他们将进入 Timed Waiting 状态。这一状态将始终放弃到超时期满或者接管到唤醒告诉。带有超时参数的罕用办法有 Thread.sleep、Object.wait.

public class MyThread extends Thread {public void run() {for (int i = 0; i < 10; i++) {if ((i) % 10 == 0) {System.out.println("‐‐‐‐‐‐‐" + i);
      }
      System.out.print(i);
      try {Thread.sleep(1000);
        System.out.print("陈丽好!\n");
      } catch (InterruptedException e) {e.printStackTrace();
      }
    }
  }
  public static void main(String[] args) {new MyThread().start();}
}

这些代码就会像计时器,在每个数字之间暂停一秒输入一个陈丽好。


2.BLOCKED(锁阻塞)

当一个线程试图获取一个对象锁,而该对象锁被其余的线程持有,则该线程进入 Blocked 状态;当该线程持有锁时,该线程将变成 Runnable 状态。


3.Waiting(有限期待)

一个线程在期待另一个线程执行一个(唤醒)动作时,该线程进入 Waiting 状态。进入这个状态后是不能主动唤醒的,必须期待另一个线程调用 notify 或者 notifyAll 办法才可能唤醒。

package com.kjzz;

public class Demo10 {public static Object a = new Object();
    public static void main(String[] args) {new Thread(new Runnable() {
            @Override
            public void run() {while (true){synchronized (a){
                            try {System.out.println(Thread.currentThread().getName() + "=== 获取到锁对象,调用 wait 办法,进入 waiting 状态,开释锁对象");
                                a.wait();}catch (InterruptedException e){e.printStackTrace();
                            }
                        System.out.println(Thread.currentThread().getName() + "=== 从 waiting 状态醒来,获取到锁对象,继续执行了");

                    }
                }
            }
        },"期待线程").start();
        new Thread(new Runnable() {
            @Override
            public void run() {
                try {System.out.println(Thread.currentThread().getName() +"------ 期待 5 秒钟");
                    Thread.sleep(5000);
                }catch (InterruptedException e){e.printStackTrace();
                }
                synchronized (a){System.out.println(Thread.currentThread().getName() + "----- 获取到锁对象, 调用 notify 办法,开释锁对象");
                    a.notify();}
            }
        },"唤醒线程").start();}
}

这些代码运行后期待五秒,会唤醒线程。


Waiting(无线期待) 线程状态图

退出移动版