zoukankan      html  css  js  c++  java
  • 45 线程池都有哪些状态?

    线程池都有哪些状态?

    答:

    线程池状态:

    线程池的5种状态:RUNNING、SHUTDOWN、STOP、TIDYING、TERMINATED。

    见 ThreadPoolExecutor 源码

    // runState is stored in the high-order bits
        private static final int RUNNING    = -1 << COUNT_BITS;
        private static final int SHUTDOWN   =  0 << COUNT_BITS;
        private static final int STOP       =  1 << COUNT_BITS;
        private static final int TIDYING    =  2 << COUNT_BITS;
        private static final int TERMINATED =  3 << COUNT_BITS;
    

     

    1. RUNNING:线程池一旦被创建,就处于 RUNNING 状态,任务数为 0,能够接收新任务,对已排队的任务进行处理。

    2. SHUTDOWN:不接收新任务,但能处理已排队的任务。调用线程池的 shutdown() 方法,线程池由 RUNNING 转变为 SHUTDOWN 状态。

    3. STOP:不接收新任务,不处理已排队的任务,并且会中断正在处理的任务。调用线程池的 shutdownNow() 方法,线程池由(RUNNING 或 SHUTDOWN ) 转变为 STOP 状态。

    4. TIDYING:

    • SHUTDOWN 状态下,任务数为 0, 其他所有任务已终止,线程池会变为 TIDYING 状态,会执行 terminated() 方法。线程池中的 terminated() 方法是空实现,可以重写该方法进行相应的处理。

    • 线程池在 SHUTDOWN 状态,任务队列为空且执行中任务为空,线程池就会由 SHUTDOWN 转变为 TIDYING 状态。

    • 线程池在 STOP 状态,线程池中执行中任务为空时,就会由 STOP 转变为 TIDYING 状态。

    1. TERMINATED:线程池彻底终止。线程池在 TIDYING 状态执行完 terminated() 方法就会由 TIDYING 转变为 TERMINATED 状态。

    状态转换如图


     

    原文链接: https://www.cnblogs.com/ConstXiong/p/11686292.html
     

    JDK 源码中的解释如下

    状态:

    The runState provides the main lifecyle control, taking on values:
    
      RUNNING:  Accept new tasks and process queued tasks
      SHUTDOWN: Don't accept new tasks, but process queued tasks
      STOP:     Don't accept new tasks, don't process queued tasks,
                and interrupt in-progress tasks
      TIDYING:  All tasks have terminated, workerCount is zero,
                the thread transitioning to state TIDYING
                will run the terminated() hook method
      TERMINATED: terminated() has completed
    

     

    状态间的变化

    RUNNING -> SHUTDOWN
       On invocation of shutdown(), perhaps implicitly in finalize()
    (RUNNING or SHUTDOWN) -> STOP
       On invocation of shutdownNow()
    SHUTDOWN -> TIDYING
       When both queue and pool are empty
    STOP -> TIDYING
       When pool is empty
    TIDYING -> TERMINATED
       When the terminated() hook method has completed
    
    Threads waiting in awaitTermination() will return when the
    state reaches TERMINATED.
    
  • 相关阅读:
    Android 绑定Service的实现方法二:使用Messenger
    Android 利用SurfaceView进行图形绘制
    Android 垂直SeekBar
    Android Camera(一) 调用系统相机应用
    Android Camera(二) Camera程序编写
    算法题009 电梯调度算法
    Git基础使用教程:第一个Git项目
    Android上的GPS程序报错:Fail to find provider info for com.google.android.gsf.gservices
    JUnit4:多组数据的单元测试:用JUnit4做参数化测试
    Git基础:添加与提交
  • 原文地址:https://www.cnblogs.com/ynzj123/p/12829325.html
Copyright © 2011-2022 走看看