一、Java中的线程状态可以分为以下五类:
1. 新建(New)状态:
当我们创建一个Thread对象时,它的状态是新建状态,表示该线程对象已被创建但还没有启动执行。
2. 运行(Runnable)状态:
当我们调用Thread对象的start()方法时,该线程进入运行状态。处于这个状态的线程可能正在执行,也可能正在等待CPU分配时间片。
3. 阻塞(Blocked)状态:
当一个线程被阻塞时,它进入阻塞状态。在阻塞状态中,线程不会占用CPU时间,直到一些特定的条件满足时,如等待I/O操作完成、等待获取锁等,线程才会进入就绪状态。
4. 休眠(Waiting)状态:
当一个线程被调用wait()、join()或park()等方法时,它进入休眠状态。在这个状态中,线程不占用CPU时间,直到被唤醒。
5. 终止(Terminated)状态:
当线程完成了它的任务或者因为一个异常而结束时,它进入终止状态。
二、Java提供了一些方法来操作线程状态。如下:
1. Thread.sleep(long millis)方法:
线程休眠指定的毫秒数。
2. Object.wait()方法:
线程等待,直到另一个线程调用notify()或notifyAll()方法来唤醒它。
3. Thread.join()方法:
等待指定线程结束。
4. Thread.interrupt()方法:
中断线程。
下面是一个简单的Java程序,展示了如何使用线程状态:
public class ThreadStateDemo {public static void main(String[] args) throws InterruptedException {Thread thread = new Thread(() -> {try {Thread.sleep(5000);} catch (InterruptedException e) {System.out.println("线程被中断了!");}});System.out.println("创建线程,状态为:" + thread.getState());thread.start();System.out.println("启动线程,状态为:" + thread.getState());Thread.sleep(1000);System.out.println("等待1秒,状态为:" + thread.getState());thread.interrupt();System.out.println("中断线程,状态为:" + thread.getState());Thread.sleep(1000);System.out.println("等待1秒,状态为:" + thread.getState());}
}
该程序创建一个线程,让它休眠5秒钟,然后中断该线程。程序输出每个时间点的线程状态。运行该程序,可以看到线程的状态随着时间的推移而变化。
(文章为作者在学习java过程中的一些个人体会总结和借鉴,如有不当、错误的地方,请各位大佬批评指正,定当努力改正,如有侵权请联系作者删帖。)