美文网首页
java多线程运行状态

java多线程运行状态

作者: MrShen_1eaa | 来源:发表于2020-07-24 17:55 被阅读0次
image.png
image.png

线程状态从大的方面来说,可归结为:初始状态、就绪状态、运行状态、阻塞状态和消亡状态,具体可细分为上图所示7个状态,说明如下:

  • 1、线程的实现有两种方式,一是继承Thread类,二是实现Runnable接口,三是实现Callable接口,但不管怎样,当我们new了Thread实例后,线程就进入了初始状态;
  • 2、当该对象调用了start()方法,就进入就绪状态;
  • 3、进入就绪状态后,当该对象被操作系统选中,获得CPU时间片就会进入运行状态;
  • 4、进入运行状态后涉及的情况就比较多,大致有如下情形:
    • run()方法或main()方法结束后,线程就进入终止状态;
    • 当线程调用了自身的sleep()方法或其他线程的join()方法,就会进入阻塞状态(该状态虽停止当前线程,但并不释放所占有的资源);
    • 当sleep()结束或join()结束后,该线程进入就绪状态,继续等待OS分配时间片;
    • 当线程刚进入就绪状态(注意,还没运行),发现将要调用的资源被锁住(synchroniza,lock),将会立即进入锁池状态,等待获取锁标记(这时的锁池里也许已经有了其他线程在等待获取锁标记,这时它们处于队列状态,既先到先得),一旦线程获得锁标记后,就转入就绪状态,等待OS分配 CPU时间片;
    • 当线程调用wait()方法后会进入等待队列(进入这个状态会释放所占有的所有资源,与阻塞状态不同),进入这个状态后,是不能自动唤醒的,必须依靠其他线程调用notify()或notifyAll()方法才能被唤醒(由于notify()只是唤醒一个线程,但我们由于不能确定具体唤醒的是哪一个线程,也许我们需要唤醒的线程不能够被唤醒,因此在实际使用时,一般都用notifyAll()方法,唤醒有所线程),线程被唤醒后会进入锁池,等待获取锁标记。 当线程调用stop方法,即可使线程进入消亡状态,但是由于stop方法是不安全的,不鼓励使用,大家可以通过run方法里的条件变通实现线程的 stop。

1、触发--->BLOCKED状态方法:

  • Synchronized修饰实例方法,加对象锁;
  • Synchronized修饰类,加类锁;
  • Synchronized修饰代码块,加锁;

2、触发--->TIMED_WAITING状态方法:

  • Thread.sleep(long);
  • Object.wait(long);
  • Thread.join(long);
  • LockSupport.parkNanos(long);
  • LockSupport.parkUntil(long);

3、触发--->WAITING状态方法:
与触发TIMED_WAITING方法类似,只是去掉超时时间;

相关文章

  • Java高级工程师学习路径

    第一章 多线程并发编程 1.1 Java基础 1.1.1 JAVA程序运行堆栈分析1.1.2 线程状态1.1.3 ...

  • Java多线程模型

    Java多线程模型 生命周期 Java 线程的生命周期包括创建,就绪,运行,阻塞,死亡 5 个状态。一个 Java...

  • java多线程运行状态

    线程状态从大的方面来说,可归结为:初始状态、就绪状态、运行状态、阻塞状态和消亡状态,具体可细分为上图所示7个状态,...

  • 学习

    今天看了imooc的JAVA 多线程运行

  • 4. Java并发编程基础

    Java多线程 Java程序的运行是main线程和多个其他线程的同时运行,包括JVM内部线程 使用多线程的原因:更...

  • Java多线程编程核心技术【笔记】

    Java多线程编程核心技术【笔记】 第一章 Java多线程技能 使用多线程的场景? 阻塞 多线程提高运行效率 依赖...

  • Java相关面试问题

    线程,多线程,线程池的那些事 Java中的线程的生命周期大体可分为5种状态:新建、可运行、运行、阻塞、死亡。 1、...

  • 高并发(4)- 线程的状态

    前言 上篇文章讲解了多线程的停止方法。我们本篇文章来讲讲多线程的运行状态。 一、多线程的运行状态。 我们都知道,线...

  • day11-04/05-多线程(线程练习)

    day11-05-多线程(线程运行状态)

  • 线程(Thread)

    Java 多线程编程 Java 给多线程编程提供了内置的支持。一个多线程程序包含两个或多个能并发运行的部分。程序的...

网友评论

      本文标题:java多线程运行状态

      本文链接:https://www.haomeiwen.com/subject/nprslktx.html