美文网首页
线程生命周期

线程生命周期

作者: Du___ | 来源:发表于2019-03-21 11:16 被阅读0次

    1、RUNNABLE和BLOCKED的状态转换——线程等待synchrozied的隐式锁。

    线程调用阻塞式API时,是否会转换到BLOCKED状态?

    在操作系统层面,线程是会转换到休眠状态,但是在JVM层面,java线程的状态不会发生变化,也就是说java线程的状态会依然保持RUNNABLE状态,JVM层面并不关心操作系统调度相关的状态,因为在JVM看来,等待CPU使用权(操作系统层面此时处于可执行状态)与等待I/O(操作系统层面此时处于休眠状态)没有区别,都是在等待某个资源,所以都归入了RUNNABLE状态。

    我们平时所谓的java在调用阻塞式API时,线程会阻塞,指的是操作系统线程的状态,并不是java线程的状态。


    2、RUNNABLE 与 WAITING 的状态转换

    2.1、获得synchrozied隐式锁的线程,调用无参数的Object.wait()

    2.2、Thread.join(),例如有一个线程对象A,当调用A.join()的时候,执行这条语句的线程会等待threadA 执行完。

    2.3、调用LockSupport.park()方法。

    3、RUNNABLE 与 TIMED_WAITING 的状态转移

    WAITING基础上加了超时参数

    相关文章

      网友评论

          本文标题:线程生命周期

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