zoukankan      html  css  js  c++  java
  • 【Java多线程】线程状态、线程池状态

    线程状态:

     

    线程共包括以下5种状态。
    1. 新建状态(New)
      
    线程对象被创建后,就进入了新建状态。例如,Thread thread = new Thread()。

    2. 就绪状态(Runnable)
      
    也被称为“可执行状态”。线程对象被创建后,其它线程调用了该对象的start()方法,从而来启动该线程。
      例如,thread.start()。处于就绪状态的线程,随时可能被CPU调度执行。

    3. 运行状态(Running)
      
    线程获取CPU权限进行执行。需要注意的是,线程只能从就绪状态进入到运行状态。

    4. 阻塞状态(Blocked)
      
    阻塞状态是线程因为某种原因放弃CPU使用权,暂时停止运行。直到线程进入就绪状态,才有机会转到运行状态。阻塞的情况分三种:

        (01) 等待阻塞 -- 通过调用线程的wait()方法,让线程等待某工作的完成。
        (02) 同步阻塞 -- 线程在获取synchronized同步锁失败(因为锁被其它线程所占用),它会进入同步阻塞状态。
        (03) 其他阻塞 -- 通过调用线程的sleep()或join()或发出了I/O请求时,线程会进入到阻塞状态。
          当sleep()状态超时、join()等待线程终止或者超时、或者I/O处理完毕时,线程重新转入就绪状态。

    5. 死亡状态(Dead)
      
    线程执行完了或者因异常退出了run()方法,该线程结束生命周期。




    
    

    线程池状态:

    1. RUNNING

    (01) 状态说明:线程池处在RUNNING状态时,能够接收新任务,以及对已添加的任务进行处理。
    (02) 状态切换:线程池的初始化状态是RUNNING。换句话说,线程池被一旦被创建,就处于RUNNING状态!
    道理很简单,在ctl的初始化代码中(如下),就将它初始化为RUNNING状态,并且"任务数量"初始化为0。

    private final AtomicInteger ctl = new AtomicInteger(ctlOf(RUNNING, 0));

    2. SHUTDOWN

    (01) 状态说明:线程池处在SHUTDOWN状态时,不接收新任务,但能处理已添加的任务。
    (02) 状态切换:调用线程池的shutdown()接口时,线程池由RUNNING -> SHUTDOWN。

    3. STOP

    (01) 状态说明:线程池处在STOP状态时,不接收新任务,不处理已添加的任务,并且会中断正在处理的任务。
    (02) 状态切换:调用线程池的shutdownNow()接口时,线程池由(RUNNING or SHUTDOWN ) -> STOP。

    4. TIDYING
    (01) 状态说明:当所有的任务已终止,ctl记录的"任务数量"为0,线程池会变为TIDYING状态。当线程池变为TIDYING状态时,会执行钩子函数terminated()。terminated()在ThreadPoolExecutor类中是空的,若用户想在线程池变为TIDYING时,进行相应的处理;可以通过重载terminated()函数来实现。
    (02) 状态切换:当线程池在SHUTDOWN状态下,阻塞队列为空并且线程池中执行的任务也为空时,就会由 SHUTDOWN -> TIDYING。
    当线程池在STOP状态下,线程池中执行的任务为空时,就会由STOP -> TIDYING。

    5. TERMINATED
    (01) 状态说明:线程池彻底终止,就变成TERMINATED状态。
    (02) 状态切换:线程池处在TIDYING状态时,执行完terminated()之后,就会由 TIDYING -> TERMINATED。

  • 相关阅读:
    java.lang.NoClassDefFoundError: TagSupport 错误
    ${pageContext.request.contextPath}的作用
    JS获取table表格任意单元格值
    数据库导出为Excel
    requestScope含义
    每种创伤,都是另一种成熟
    关于AJAX
    the public type xxx must be defined in its own file
    MyEclipse取消Show in Breadcrumb的方法
    Sql2005里获取表的结构SQL
  • 原文地址:https://www.cnblogs.com/itplay/p/9946774.html
Copyright © 2011-2022 走看看