synchronousqueue,SynchronousQueue
作者:admin日期:2024-01-05 21:00:31浏览:56分类:资讯
okhttp(二)之线程池分析
1、参数一:corePoolSize 核心线程数,表示线程池需要一直维护的数量,决定了任务是开辟新的线程还是放到workQueue任务队列中去。
2、executorService 线程池,核心线程是0,最大数是maxValue,线程池内部维护等待队列,OKHTTP中是一个无容量队列,相当于来到请求就必须处理,没有线程时就会创建,所以就会是maxValue。
3、利用建造者模式构建okHttpClient实例对象,构建过程中可以动态配置参数,请求时间,响应时间,缓存信息等。 创建Request对象,设置请求方式,链接地址,参数等信息。
4、源码分析:线程池创建线程时,会将线程封装成工作线程 Worker,Worker 在执行完任务后,还会循环获取工作队列里的任务来执行。
5、第一步:创建OkHttpClient,创建OkHttpClient有两种方式:OkHttpClient提供了丰富的配置方法,例如添加拦截器、指定连接池、设置请求超时等等。
6、后来的解决方案:减小http的超时时长(之前设置的是60秒);加大dubbo线程池容量;这样就算http调用会发生超时,超时时间也很短,会让dubbo线程很快释放,增加线程池最大容量就不说了。
线程池核心参数
1、本文主要是围绕 ThreadPoolExecutor(线程池框架的核心类)的构造方法参数 展开:corePoolSize 线程池中的核心线程数。
2、线程池创建线程时,会将线程封装成工作线程 Worker,Worker 在执行完任务后,还会循环获取工作队列里的任务来执行。
3、Spring中常用的线程池是 ThreadPoolTaskExecutor ,它是是借助于JDK并发包中的 java.util.concurrent.ThreadPoolExecutor 来实现的。
超详细的线程池使用解析
1、线程池中通过 ctl 字段来表示线程池中的当前状态,主池控制状态 ctl 是 AtomicInteger 类型,包装了两个概念字段:workerCount 和 runState,workerCount 表示有效线程数,runState 表示是否正在运行、正在关闭等状态。
2、如果需要将线程放置到单线程单元中(线程池中的线程均处于多线程单元中);如果需要永久标识来标识和控制线程,比如想使用专用线程来终止该线程,将其挂起或按名称发现它。
3、具体使用如下:一种只有一个工作线程的线程池。可以通过 Executors 的 newSingleThreadExecutor() 方法创建:newSingleThreadExecutor() 具体实现:从源码可以看出,这种线程池只有一个核心线程,并且总线程数为 1。
java常用的几种线程池实例讲解
1、以下是Java自带的几种线程池:(1)、newFixedThreadPool 创建一个指定工作线程数量的线程池。每当提交一个任务就创建一个工作线程,如果工作线程数量达到线程池初始的最大数,则将提交的任务存入到池队列中。
2、newScheduledThreadPool创建一个定长线程池,支持定时及周期性任务执行。
3、创建线程池主要分为两大类,第一种是通过 Executors 工厂类创建线程池,第二种是自定义创建线程池。根据《阿里java开发手册》中的规范,线程池不允许使用 Executors 去创建,原因是规避资源耗尽的风险。
阻塞队列和线程池原理
java线程池的实现原理很简单,说白了就是一个线程集合workerSet和一个阻塞队列workQueue。当用户向线程池提交一个任务(也就是线程)时,线程池会先将任务放入workQueue中。
线程池中的核心线程数。当提交一个任务时,线程池创建一个新线程执行任务,直到当前线程数等于corePoolSize;如果当前线程数为corePoolSize,继续提交的任务被保存到阻塞队列中,等待被执行。maximumPoolSize 额外最大线程数。
先判断线程池中核心线程池所有的线程是否都在执行任务。
线程池判断核心线程池里的线程是否都在执行任务。如果不是,则创建一个新的工作线程来执行任务。如果核心线程池里的线程都在执行任务,则执行第二步。线程池判断工作队列是否已经满。
corePoolSize(线程池的基本大小):当提交一个任务到线程池时,线程池会创建一个...runnableTaskQueue(任务队列):用于保存等待执行的任务的阻塞队列。
线程池工作原理
1、线程池中的核心线程数。当提交一个任务时,线程池创建一个新线程执行任务,直到当前线程数等于corePoolSize;如果当前线程数为corePoolSize,继续提交的任务被保存到阻塞队列中,等待被执行。maximumPoolSize 额外最大线程数。
2、java线程池的实现原理很简单,说白了就是一个线程集合workerSet和一个阻塞队列workQueue。当用户向线程池提交一个任务(也就是线程)时,线程池会先将任务放入workQueue中。
3、先判断线程池中核心线程池所有的线程是否都在执行任务。
4、corePoolSize(线程池的基本大小):当提交一个任务到线程池时,线程池会创建一个...runnableTaskQueue(任务队列):用于保存等待执行的任务的阻塞队列。
猜你还喜欢
- 08-27 excel统一添加百分号 Excel统一添加,轻松解决数据整理难题
- 08-27 大智慧 导出 excel 大智慧 导出股票数据
- 08-27 excel表里求和为0 excel求和结果为0
- 08-27 excel怎么用word打开 excel如何用word打开
- 08-27 在excel怎样进行排名 excel怎样进行排名但顺序不变
- 08-27 文本保存为excel 文本保存为图片
- 08-27 Excel如何一次保护多个工作表
- 08-27 excel2007图片背景消除在哪里 Excel 2007中图片背景的巧妙应用
- 08-27 excel里面统计人数的函数 Excel统计人数的公式
- 08-27 Excel重复项筛选公式,如何将重复项筛选出来
- 08-27 导出到excel一闪就没有了 一键导出Excel,轻松实现数据管理
- 08-27 excel字符串包含字符串 Excel 含有字符串
取消回复欢迎 你 发表评论:
- 最近发表
- 标签列表
- 友情链接
暂无评论,来添加一个吧。