举报投诉联系我们 手机版 热门标签 编程学
您的位置:编程学 > java线程状态转换 Java 线程状态

java线程状态转换 Java 线程状态

2023-03-12 14:18 Java教程

java线程状态转换 Java 线程状态

java线程状态转换

Java线程状态转换是指在Java多线程编程中,一个线程从一个状态转换到另一个状态的过程。Java中的多线程有五个基本的生命周期,分别是新建、就绪、运行、阻塞和死亡。在不同的生命周期中,一个Java多线程会从一个生命周期转换到另一个生命周期,这就是所谓的Java多线程的“生存”。

新建是指当我们使用new关键字实例化Thread对象时,该Thread对象就处于新建的生存期。此时,该Thread对象已准备好运行,但并不意味它会马上开始执行。

就绪是指当我们使用start()方法启动Thread对象时(即将其变成可运行态),该Thread对象就会进入就绪态。此时,该Thread对象已准备好开始执行了(但并不意味它会马上开始执行)。

运行是指当CPU开始执行Thread对象时(即将其变成运行态);此时该Thread对象正在CPU上执行代码。

阻塞是比如当一个Thread对象在执行代码时遇到了sleep()方法、wait()方法、join()方法或者synchronized关键字时都会发生阻塞。此时该Thread对象将不再占用CPU耗电量也很低。

public class ThreadState { 

    public static void main(String[] args) { 

        Thread thread = new Thread(new Runnable() { 

            @Override 

            public void run() { 

                System.out.println("thread is running"); 

            } 

        }); 

        // 打印出新建的thread的state 

        System.out.println("thread state:" + thread.getState()); 

        // 启动thread, 此时thread state应该变成RUNNABLE 

        thread.start(); 

        System.out.println("thread state:" + thread.getState());  

    }  
}

Java 线程状态

Java线程教程 - Java线程状态

停止,挂起和恢复线程

下面的代码演示了如何模拟Thread类中的stop(),suspend()和resume()方法。

public class Main extends Thread {
  private volatile boolean keepRunning = true;
  private boolean suspended = false;
  public synchronized void stopThread() {
    this.keepRunning = false;
    this.notify();
  }

  public synchronized void suspendThread() {
    this.suspended = true;
  }

  public synchronized void resumeThread() {
    this.suspended = false;
    this.notify();
  }

  public void run() {
    System.out.println("Thread started...");
    while (keepRunning) {
      try {
        System.out.println("Going to sleep...");
        Thread.sleep(1000);
        synchronized (this) {
          while (suspended) {
            System.out.println("Suspended...");
            this.wait();
            System.out.println("Resumed...");
          }
        }
      } catch (InterruptedException e) {
        e.printStackTrace();
      }
    }
  }
  public static void main(String[] args) throws Exception {
    Main t = new Main();
    t.start();
    Thread.sleep(2000);
    t.suspendThread();
    Thread.sleep(2000);
    t.resumeThread();
    Thread.sleep(2000);
    t.stopThread();
  }
}

上面的代码生成以下结果。



阅读全文
以上是编程学为你收集整理的java线程状态转换 Java 线程状态全部内容。
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系本站删除。
相关文章
© 2024 编程学 bianchengxue.com 版权所有 联系我们
桂ICP备19012293号-7 返回底部