对于面试官提问的 线程池原理 该怎么回答呢?

看了博客觉的还是抽象,不知道从哪里答起.......
全部评论
1、接收到任务 2、判断已存在线程数是否大于等于核心线程数,如果不是,则创建新线程执行任务;否则转3 3、判断任务队列是否有界,如果不是,将任务加入队列中;否则转4 4、判断任务队列是否已满,如果不是,将任务加入队列中;否则转5 5、判断已存在线程数是否等于最大线程数,如果不是,则创建新线程执行任务;否则转6 6、拒绝该任务 按照上面的画一个流程图就明白了
点赞 回复 分享
发布于 2016-09-20 10:37
哈哈我最擅长的,生怕面试官不问这个
点赞 回复 分享
发布于 2016-09-20 10:52
主要说过程和核心参数  大概就是 : 默认情况,线程数为0, 此时来请求,则线程池new一个线程来执行, 如果 请求数大于了核心数值,根据参数来选择是否继续new线程,   直到线程数等于最大线程值; 此时在来任务,则压入到等待队列中,当等待队列满时,此时在来任务则会直接放弃;   当压力没有那么大时,线程池会回收线程数量直到 核心数 或者根据配置参数 可以达到0 corePoolSize: 核心池大小,默认情况下线程不会超过核心大小。 maximumPoolSize: 最大线程数, 当达到一定负载时,线程数会超过核心数,但始终小于最大线程数. 当负载较轻会回收线程至核心池数量 keepAliveTime: 表示线程没有任务执行时,的存活时间. 默认情况,当线程数大于核心小于最大数量时才会启用; 如果调用allowCoreThreadTimeOut(boolean)方法,线程数下界为0 unit:keepAliveTime的时间单位 workQueue: 阻塞队列,用来存储等待执行的任务。 一般很少使用abq和pbq,多用lbq和synchronousQueue.队列. abq: arrayBlockingQueue队列,基于数组的先进先出,创建时必须指定大小 pbq: PriorityBlockingQueue 优先级队列 lbq: linkedBlockingQueue,基于链表的队列,默认长度为Integer.MAX_VALUE synchronousQueue: 不保存任务,直接创建新线程 threadFactory:线程工厂 handler: 对拒绝任务的处理策略,四种参数. abortPolicy(丢弃任务并抛异常),discardPolicy(丢弃任务不抛异常),DiscardOldestPolicy(丢弃最前面的任务),callerRunsPolicy(交由调用线程处理) 线程池构造函数: 实际都是指向最后一个构造函数; workers: 工作集 allowCoreThreadTimeOut: 是否允许核心线程设置存活时间 poolSize: 线程池中当前线程数 largestPoolSize: 记录曾经出现过的最大线程数 completedTaskCount: 记录已经执行完的任务数
点赞 回复 分享
发布于 2016-09-20 10:38
一句话概括就是为了让线程可以复用,执行完任务不销毁而是执行另一个任务,在高并发情况下能够节约资源
点赞 回复 分享
发布于 2016-09-20 10:29
正好总结过一个流程图,但是并不能发图的样子…
点赞 回复 分享
发布于 2016-09-20 10:31
看下源码怎么实现的不就可以了吗
点赞 回复 分享
发布于 2016-09-20 10:31
哪家公司?
点赞 回复 分享
发布于 2016-09-20 10:23

相关推荐

1 描述最左匹配原则并举例说明失效场景2 聚簇索引与普通索引的区别3 聚簇索引的缺点4 聚簇索引叶子节点存什么5 ES与MySQL的区别6 ES的基本原理7 缓存穿透、击穿、雪崩的概念及区别8 缓存穿透的解决方案9 布隆过滤器的底层原理10 哈希函数越多越好吗11 Redis如何实现分布式锁12 除Redis外还能用什么实现分布式锁13 Redisson是什么14 Redisson相比原生Redis加锁的优势15 Redis数据过期策略16 Redis集群模式有哪些17 主从模式有哪些形式18 CompletableFuture与Future的区别19 CompletableFuture常用的两个方法及区别20 不传线程池时CompletableFuture默认使用什么21 线程池核心参数如何设置22 线程池任务执行流程23 动态线程池了解吗24 压测在性能调优中的作用25 常用的并发安全容器有哪些26 ConcurrentHashMap如何保证线程安全27 HashTable与ConcurrentHashMap区别28 synchronized与Lock的区别29 synchronized与Lock谁更优30 synchronized可以实现锁升级吗31 volatile的作用32 常用设计模式有哪些33 单例模式在哪些场景使用34 最常用的单例实现方式35 手写单例(懒汉+双检锁)36 单例中volatile的作用37 Java GC存在的意义38 垃圾对象的判定标准39 分代收集机制中Eden与Survivor的作用40 Survivor区比例41 动态年龄判断机制42 Sentinel实现限流的注解/方式43 限流与熔断的区别44 Caffeine的核心方法45 Caffeine相比其他本地缓存的优势46 MySQL性能调优流程47 消息队列如何保证最终一致性48 消息队列幂等性如何设计49 Spring常用注解有哪些50 @Autowired与@Resource区别51 Spring Boot与Spring区别52 事务注解@Transactional使用方式53 @Transactional在什么场景会失效54 算法题:合并两个有序链表
美团秋招笔试
点赞 评论 收藏
分享
评论
点赞
26
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务