高并发-线程池面试

高并发-线程池2024

心得

  1. 面试都是围绕着三高展开,高并发,高可用,分布式展开。多线程属于高并发的范畴

  2. 好多问题在数据访问量比较小的情况下不好发生,但是数据量比较大的情况下,就要考虑更多,否则就会出问题。

  3. 在学习原理和底层这块,会用到很多的图例,图解,这块最好用在线画图工具自己画出来,并把链接贴过来,或者用md来画图也可以。

好的博客

必会面试题

  • 多线程
  • 面试题 26 . 简述 Synchronized 的原理 ?
  • 面试题 42 . Java 中的线程池是如何实现 ?
  • 面试题 43 . Java创建线程池的几个核心构造参数?
  • 面试题 44 . 请简述Java线程池中的线程是怎么创建的?
  • 面试题 86 . 请列举ThreadPoolexecutor参数配置?
  • 面试题 103 . 简述Java线程池中队列常用类型有哪些 ?
  • 面试题 122 . 简述乐观锁和悲观锁的理解及如何实现,有哪些实现方式?

为什么使用线程池

使用线程池的优点
减少不断创建和销毁线程的资源销耗,可以重复利用线程池中的线程
提高任务响应速度,不需要等待线程创建,就可以直接使用存在的线程
便于管理,可以统一的分配,管理和调优。

线程池的实现原理

如果线程数少于核心线程线程数,既是有线程空闲也是会创建新的线程。
如果线程数等于核心线程,那么就会把任务放到队列中。
如果线程池线程数大于或等于核心线程数,并且队列以及满了,但是线程数小于最大线程,那么就会创建新的线程来处理。
如果线程数达到了最大线程数,那么就会通过handle设置的策略来拒绝这个任务。
并且线程中的线程如果空闲时间超过了指定的空闲时间,就会被销毁,从而动态的调整线程池的数量。

线程池的拒绝策略

可以在构造器中设置线程池的拒绝策略
核心线程  最大线程 队列  首先核心线程创建,其次队列打满,才会继续创建线程,线程达到最大线程后,就会执行拒绝策略。有4种拒绝的策略
第一个 线程池满了一行,会抛出一个runtime的异常,我们可以感知到线程池已满,可以重试或放弃提交。
第二种,线程池满了,直接丢弃,不会通知,会有一定的风险
第三种,线程池满了,会丢弃线程队列中时间最长的线程,也会存在风险。
第四种,线程满了,先进行等待,等有资源了在提交新的任务。
我们也可以在方法中大于自己的日志,当线程池满了的情况下,及时处理。

阻塞队列已满,在提交任务会发生什么问题

核心线程  阻塞队列 非核心线程 执行拒绝策略

threadlocal原理和使用

这是一个线程本地存储机制,这个是一个键值对
比方存储保存用户的信息,保存连接的对象。
在线程池使用的时候,如果线程一直占用,可能会出现内存泄漏的情况发生。解决的办法是数据使用后要记得清除掉。

多线程配置

核心线程10个,其他线程根据电脑的核数,一核大概配置20个线程,队列排1000个。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值