Java线程状态变换过程代码解析

 更新时间:2020年06月03日 10:16:53   作者:Kuris101  
这篇文章主要介绍了Java线程状态变换过程代码解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

线程状态

  • NEW:刚创建未启动的线程
  • RUNNABLE:正在执行状态
  • BLOCKED:处于阻塞状态的线程
  • WAITING:正在等待另一个线程执行特定动作的线程
  • TIMED_WAITING:等待另一个线程执行时间到达指定时间
  • TERMINATED:线程退出执行
public class TestState {
  public static void main(String[] args) {
    Thread thread = new Thread(()->{
      for (int i = 0; i < 5; i++) {
        try {
          Thread.sleep(1000);
        } catch (InterruptedException e) {
          e.printStackTrace();
        }
      }
      System.out.println("/////");
    });

    //观察线程状态
    Thread.State state = thread.getState();
    System.out.println(state); //New状态

    thread.start();
    state = thread.getState();
    System.out.println(state);//Run状态

    while (state!=Thread.State.TERMINATED){
      try {
        Thread.sleep(100);
      } catch (InterruptedException e) {
        e.printStackTrace();
      }
      state = thread.getState();//更新线程状态
      System.out.println(state);//输出状态
    }
  }
}

线程礼让

  • 当前正在执行的线程暂停,但是不会阻塞
  • 当前线程失去处理机,编程就绪状态
  • 礼让是否成功取决于CPU,如果礼让成功,则等待下一次调度
public class TestYield {
  public static void main(String[] args) {
    MyYield myYield = new MyYield();

    new Thread(myYield,"a").start();
    new Thread(myYield,"b").start();
  }
}

class MyYield implements Runnable{
  @Override
  public void run() {
    System.out.println(Thread.currentThread().getName()+"线程开始执行");
    Thread.yield();
    System.out.println(Thread.currentThread().getName()+"线程停止执行");
  }
}

执行结果:

线程强制执行到结束

  • 使用join()方法
  • 使用join()方法的线程会强制执行直到结束,不会让出处理机
public class TestJoin implements Runnable{
  @Override
  public void run() {
    for (int i = 0; i < 1000; i++) {
      System.out.println("强制执行线程来了"+i);
    }
  }

  public static void main(String[] args) throws Exception{
    TestJoin testJoin = new TestJoin();
    Thread thread = new Thread(testJoin);
    thread.start();

    for (int i = 0; i < 500; i++) {
      if(i==200){
        thread.join();
      }
      System.out.println("主线程"+i);
    }
  }
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

相关文章

  • Java实现在不同线程中运行的代码实例

    Java实现在不同线程中运行的代码实例

    这篇文章主要介绍了Java实现在不同线程中运行的代码,结合具体实例形式分析了java多线程操作的相关实现技巧,需要的朋友可以参考下
    2017-04-04
  • SpringMVC加载控制与Postmand的使用和Rest风格的引入及RestFul开发全面详解

    SpringMVC加载控制与Postmand的使用和Rest风格的引入及RestFul开发全面详解

    SpringMVC是一种基于Java,实现了Web MVC设计模式,请求驱动类型的轻量级Web框架,即使用了MVC架构模式的思想,将Web层进行职责解耦。基于请求驱动指的就是使用请求-响应模型,框架的目的就是帮助我们简化开发,SpringMVC也是要简化我们日常Web开发
    2022-10-10
  • IDEA 控制台中文乱码4种解决方案

    IDEA 控制台中文乱码4种解决方案

    IntelliJ IDEA 如果不进行相关设置,可能会导致控制台中文乱码、配置文件中文乱码等问题,本文主要介绍了IDEA控制台中文乱码4种解决方案,具有一定的参考价值,感兴趣的可以了解一下
    2024-07-07
  • SpringBoot实现devtools实现热部署过程解析

    SpringBoot实现devtools实现热部署过程解析

    这篇文章主要介绍了SpringBoot实现devtools实现热部署过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-03-03
  • java发送短信系列之限制日发送次数

    java发送短信系列之限制日发送次数

    这篇文章主要为大家详细介绍了java发送短信系列之限制日发送次数,详细介绍了限制每日向同一个用户(根据手机号和ip判断)发送短信次数的方法,感兴趣的小伙伴们可以参考一下
    2016-02-02
  • SpringBoot参数验证10个技巧值得收藏

    SpringBoot参数验证10个技巧值得收藏

    Spring Boot提供了内置的验证注解,可以帮助简单、快速地对输入字段进行验证,例如检查 null 或空字段、强制执行长度限制、使用正则表达式验证模式以及验证电子邮件地址,那么在Spring Boot应用中如何做好参数校验工作呢,本文提供了10个小技巧感兴趣的朋友一起看看吧
    2023-08-08
  • SpringBoot启动security后如何关闭弹出的/login页面

    SpringBoot启动security后如何关闭弹出的/login页面

    这篇文章主要介绍了SpringBoot启动security后如何关闭弹出的login页面问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-12-12
  • SpringBoot2 集成log4j2日志框架的实现

    SpringBoot2 集成log4j2日志框架的实现

    这篇文章主要介绍了SpringBoot2 集成log4j2日志框架的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-10-10
  • gRPC在Java中的实现与应用详解

    gRPC在Java中的实现与应用详解

    gRPC是由Google开发的高性能、开源的通用远程过程调用(RPC)框架,本文将详细介绍如何在Java中使用gRPC,包括服务定义、服务器端实现、客户端调用以及一些高级特性,我们将通过代码示例来帮助理解gRPC的工作原理,需要的朋友可以参考下
    2024-06-06
  • SpringBoot 工程中的异常处理方式

    SpringBoot 工程中的异常处理方式

    这篇文章主要介绍了SpringBoot 工程中的异常处理方式,帮助大家更好的理解和学习使用springboot框架,感兴趣的朋友可以了解下
    2021-02-02

最新评论