Java线程的状态与常用方法有哪些
更新时间:2023-09-141. 线程的状态
在Java中,线程的状态是指线程在生命周期中所处的不同状态,可以通过Thread类中的一些方法来获取线程的状态。
Java中线程的状态包括以下几种:
- 新建(New):当一个Thread类的实例被创建时,线程就处于新建状态。此时线程没有被启动。
- 可运行(Runnable):一个新建的线程调用了start()方法后,线程进入可运行状态。此时线程可能正在运行,也可能正在等待系统资源。
- 运行(Running):线程调度器选择了一个可运行的线程,线程进入运行状态。此时线程正在执行任务的代码。
- 阻塞(Blocked):在特定情况下,线程会进入阻塞状态。比如等待某个输入、等待某个对象锁等。直到等待的条件满足后,线程才会从阻塞状态转换为可运行状态。
- 等待(Waiting):线程执行了Object.wait()方法后,线程进入等待状态。只有等待的条件满足后,其他线程调用了notify()或notifyAll()方法,等待的线程才会被唤醒。
- 计时等待(Timed Waiting):线程执行了Thread.sleep()或Object.wait(long timeout)方法后,线程进入计时等待状态。在指定的时间内,等待的条件满足后,线程会自动被唤醒。
- 终止(Terminated):线程执行完了任务的代码后,线程进入终止状态。线程的生命周期到此结束。
2. 常用方法
Java提供了一些方法来获取线程的状态信息,以及控制线程的执行。
获取线程的状态信息
Thread类提供了一些方法来获取线程的状态信息,如下:
public Thread.State getState(): 返回线程的状态。 public boolean isAlive(): 判断线程是否还活着。 public boolean isInterrupted(): 判断线程是否被中断。
线程控制方法
Thread类还提供了一些方法来控制线程的执行,如下:
public void start(): 启动该线程,使其进入可运行状态。 public void run(): 线程执行体,线程被调度执行run()方法中的代码。 public void join(): 当线程A执行了线程B的join()方法后,线程A会等待线程B执行完毕后再继续执行。 public void interrupt(): 中断线程。 public void sleep(long millis): 让线程休眠指定的时间,单位是毫秒。
3. 线程状态变迁示例代码
public class ThreadStateExample { public static void main(String[] args) throws Exception { Thread thread = new Thread(() -> { System.out.println("线程执行..."); try { Thread.sleep(1000); synchronized (ThreadStateExample.class) { ThreadStateExample.class.notify(); } } catch (InterruptedException e) { e.printStackTrace(); } }); System.out.println("新建状态:" + thread.getState()); thread.start(); System.out.println("可运行状态:" + thread.getState()); synchronized (ThreadStateExample.class) { ThreadStateExample.class.wait(); } Thread.sleep(100); System.out.println("计时等待状态:" + thread.getState()); thread.join(); System.out.println("终止状态:" + thread.getState()); } }
上述代码演示了线程状态的变迁过程,初始状态为新建状态。当线程调用start()方法后,进入可运行状态。之后在synchronized块中调用wait()方法进入等待状态,因为该等待是有时间限制的,所以进入计时等待状态。线程执行完毕后进入终止状态。
4. 总结
线程的状态在Java中是由Thread类中的一些方法来表示的,包括新建、可运行、运行、阻塞、等待、计时等待和终止状态。线程的状态变迁可以通过Thread类中的getState()方法来获取。此外,Thread类还提供了一些常用方法来控制线程的启动、中断、休眠以及等待其他线程执行完毕等操作。
了解和掌握线程的状态及常用方法对于多线程编程非常重要,可以更好地控制线程的执行顺序和状态。通过对线程状态的了解,可以设计出更加安全可靠的多线程应用。