欢迎来到代码驿站!

JAVA代码

当前位置:首页 > 软件编程 > JAVA代码

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

时间:2021-03-03 10:05:41|栏目: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 创建线程的3种方法及各自的优点

本文标题:Java线程状态变换过程代码解析

本文地址:http://www.codeinn.net/misctech/73173.html

推荐教程

广告投放 | 联系我们 | 版权申明

重要申明:本站所有的文章、图片、评论等,均由网友发表或上传并维护或收集自网络,属个人行为,与本站立场无关。

如果侵犯了您的权利,请与我们联系,我们将在24小时内进行处理、任何非本站因素导致的法律后果,本站均不负任何责任。

联系QQ:914707363 | 邮箱:codeinn#126.com(#换成@)

Copyright © 2020 代码驿站 版权所有