博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
多线程(三、线程池原理)
阅读量:5871 次
发布时间:2019-06-19

本文共 1106 字,大约阅读时间需要 3 分钟。

背景

阿里电面-线程池是如何实现的?这个问题的侧重点是什么?

普通的数据库连接池的概念一般是这样的,多个被静态代理或者动态代理生成的数据库连接,直接放到一个池子里,比方说一个队列,这个数据库连接池提供了如下的方法:

多线程(三、线程池原理)

这是典型的池化的思想。

Java的线程池则不是这个池化的思想

Java的线程池是生产者-消费者模式。

ThreadPoolExecutor的构造函数很复杂,它的7个参数分别如下:

ThreadPoolExecutor(int corePoolSize,                              int maximumPoolSize,                              long keepAliveTime,                              TimeUnit unit,                              BlockingQueue
workQueue, ThreadFactory threadFactory, RejectedExecutionHandler handler)

corePoolSize,表示线程池保有的最小线程数;

maximumPoolSize,表示线程池的最大线程数。

keepAliveTime&unit,如果一个线程空闲了keepAliveTime&unit的时间之后,而且线程数大于corePoolSize,那么这个线程就要被回了。

workQueue,工作队列,注意这个队列不是用来存放线程的,而是用来存放任务的,这个和其他池化的思想是不一样的。

threadFactory,这个参数自定义创建线程,比方说指定线程的名字。

handler 如果线程都再忙碌或者任务队列已满,自定义任务的拒绝策略,一共4种,当然1.6以后也支持通过方法allowsCoreThreadTimeOut 实现所有线程都能超时退出。

1、CallerRunsPolicy,提交任务的线程自己去执行任务。

2、AbortPolicy 默认的拒绝策略,抛出异常。
3、DiscardPolicy,直接丢弃任务,不抛出异常。
4、DiscardOldestPolicy,丢弃最老的任务,新任务增加到工作对列

那么线程池放到哪里了呢?

线程都放在了一个HashSet里面了

多线程(三、线程池原理)

转载于:https://blog.51cto.com/janephp/2398202

你可能感兴趣的文章
C# 内存回收
查看>>
master..xp_fileexist
查看>>
sql查询与修改数据库逻辑文件名,移动数据库存储路径
查看>>
SQL事务的使用
查看>>
一个字符串中包含另一个字符串所有字符的最短子串长度?——《编程之美》最短摘要的生成的简化...
查看>>
android开发之多线程实现方法概述
查看>>
pytorch对可变长度序列的处理
查看>>
[老老实实学WCF] 第八篇 实例化
查看>>
前端自动化构建工具webpack (一)之webpack安装 和 设置webpack.confi.js
查看>>
js数据类型转换大全
查看>>
java面向对象高级分层实例_实体类
查看>>
python ide
查看>>
Servlet--传参和接参
查看>>
UI之UIAlertView--提示框
查看>>
Guice 练习 constructorbindings demo
查看>>
model 弹出框放到一个html中
查看>>
jQuery easyui中获取datagrid某一列的值之和
查看>>
20190104 你懂得
查看>>
dedecms调用子栏目及文章列表
查看>>
jsoup抓取网页+具体解说
查看>>