zoukankan      html  css  js  c++  java
  • Java线程池中线程的状态简介

    首先明确一下线程在JVM中的各个状态(JavaCore文件中)

    1.死锁,Deadlock(重点关注) 

    2.执行中,Runnable(重点关注)   

    3.等待资源,Waiting on condition(重点关注) 

    4.等待监控器检查资源,Waiting on monitor(eg:如果使用System.out.println等需要分配计算机资源的时候线程会如此等待,主要还需看堆栈)

    5.暂停,Suspended

    6.对象等待中,Object.wait()

    7.阻塞,Blocked(重点关注)  

    8.停止,Parked(此状态必须明确,与字面意思不同,主要是指线程空闲时候的状态.如在线程池中,当线程被调用使用后再次放入到池子中,则其状态变为了Parked)

    Java基本线程池的实现

    public ThreadPoolExecutor(int corePoolSize,  int maximumPoolSize,  long keepAliveTime,  TimeUnit unit, BlockingQueue<Runnable> workQueue) 

    参数详解如下:

    corePoolSize - 池中所保存的线程数,包括空闲线程.(核心线程)

    maximumPoolSize - 池中允许的最大线程数。   

    keepAliveTime - 当线程数大于核心时,此为终止前多余的空闲

    线程等待新任务的最长时间。   

    unit - keepAliveTime 参数的时间单位。   

    workQueue - 执行前用于保持任务的队列。此队列仅保持由 execute 

    方法提交的 Runnable 任务。   

    上述参数队列workQueuecorePoolSize,maximumPoolSize的关系为:

    如果corePoolSize中的线程使用完,则会使用队列workQueue,队列使用完才会按照maximumPoolSize的大小启动新的线程

    对与JavaCore文件的生成针对不同的操作系统使用不同的指令

    linuxunix 使用的指令为:jstack -l  pid >>core文件名字

    IBM for aix 使用的指令为:kill -3 pid

    另外根据测试情况来看.parked状态的线程在linuxunix上体现不出来.只有在aixparked状态的线程才能体现出来,估计这和不同的JVM的实现有关系

    parked状态的由来:只有被使用过的线程再次放入线程池中才被赋予这种状态

    原网页:http://my.oschina.net/xiaoheixiadao/blog/389149





  • 相关阅读:
    操作系统
    Typora
    C++
    linux sftp 和scp 运用
    python GIL锁与多cpu
    django model 高级进阶
    django template 模板
    django view 视图控制之数据返回的视图函数
    django 创建管理员用户
    jango 模型管理数据model入门
  • 原文地址:https://www.cnblogs.com/bailiyi/p/5317380.html
Copyright © 2011-2022 走看看