Java后端每日学点系列?线程知否,List懂否,垃圾回收器晓得否
:maple_leaf: 作者:知识浅谈,CSDN博客专家,阿里云签约博主,InfoQ签约博主,华为云云享专家
:pushpin: 擅长领域:全栈工程师、爬虫、ACM算法
:wedding: 公众号:知识浅谈
这次都给他拿下
正菜来了:golf::golf::golf:
:balloon:线程安全的定义?实现线程安全的方式有哪些?
线程安全:当多个线程访问同一资源的的时候,不需要考虑多个线程对同一资源的并发访问造成不正确的结果,不需要进行同步控制来达到线程安全。
实现线程安全的方式:
- 加Synchronized锁,通过加锁来形成不会对同一资源并发操作的时候造成不正确的结果。
- 使用互斥变量,用户此变量达到一个同步的结果。
- 使用Lock锁机制,对线程不安全的代码块加lock锁。
:balloon:线程池理解吗?核心参数和执行流程?
温馨提醒:这个有点多,请仔细看下去
线程池 :之所以存在线程池,是针对单独线程在管理上等不同的方面所体现出的优势。
- 减少资源消耗:因为单线程频繁的创建和销毁会消耗资源的,所以使用线程池可以把创建的线程存储起来,使用的时候直接分配,不用频繁的创建和销毁,减少了资源的消耗。
- 便于线程的管理:如果线程是一个一个去创建的,需要我们一个个去管理,当使用线程池的时候,就交给线程池管理了。
- 线程池的灵活性:我们可以根据业务手动的设置线程池的参数,来灵活的控制像是阻塞队列,以及核心线程数等这些参数。
线程池核心参数:
kernel_size:核心线程数
max_size:最大线程数
blocking_queue:阻塞队列
keep_alive:非核心线程没有执行任务的时候存活的时间
Time_unit:存活时间的时间单位
Thread_factory:线程工厂
strategy: 策略
执行流程:
刚开始的时候线程池为空,任务来了之后查看是否有空闲的线程,有的话直接执行,没有的话查看线程池中的线程数是不是小于核心线程数,小于的话,创建线程并执行任务,如果不小于的话,查看阻塞队列是否已经满了,未满的话放入阻塞队列,满的话,查看线程池中的线程数是否小于最大线程数,小于的话,创建非核心线程执行任务,如果线程池中的线程数等于的话
,进行抛弃策略,包含四种策略:直接抛弃,抛弃并抛出异常,删除队列中时间最长的任务,并把当前任务加入队列,返回给调用线程池执行任务的线程执行。
:balloon:ArrayList和LinkedList的区别?
首先,两个都是java中的列表,但是其在不同的操作上效率不同,可根据不同的业务选用不同的列表类型。
从结构上:
从扩容上:
- ArrayList是以数组的形式,初始的大小为10,当内存不够的时候以1.5倍的大小增加。
- LinkedList是以链表的形式,通过数据的增加,长度也增加。
:balloon:说说G1和CMS的区别?优缺点等
G1:既是并发的又是并行的一种垃圾回收器,并行体现在年轻代的垃圾回收,不同的区域同时进行垃圾回收,并发体现在并发标记混合回收阶段,总共包含一下阶段:初始标记,根区域扫描,并发标记(删除区域内全为垃圾的区域),重新标记,独占清理(对不同区域垃圾占比进行排序),混合回收。
CMS:是一种并发的垃圾回收器,常用于老年代,使用的为标记清理方法,包含以下阶段:初始标记,并发标记,重新标记,并发清理,并发重置。
G1:
优点:在多CPU的环境下处理的效率比较高。
缺点:在多CPU和资源的条件下才能发挥出来优势,否则其效率就降低了。
CMS:
优点:因为并发标记和并发清理减少STW的时间,所以响应效率比较高
缺点:但是需要进行上下文的切换,也会有一定的资源消耗,在多cpu的环境比较能发挥CMS的性能。因为其标记清除的垃圾回收方法产生碎片,CMS处理器无法处理浮动垃圾。
:rice:总结
以上就是关于三者的总结:线程知否,List懂否,垃圾回收器晓得否。
- 设计模式之状态模式
- 如何实现数据库读一致性
- 我是怎么入行做风控的
- C 11精要:部分语言特性
- 吴恩达来信:人工智能领域的求职小 tips
- EasyCV带你复现更好更快的自监督算法-FastConvMAE
- 某车联网App 通讯协议加密分析(四) Trace Code
- 带你了解CANN的目标检测与识别一站式方案
- EasyNLP玩转文本摘要(新闻标题)生成
- PostgreSQL逻辑复制解密
- 基于 CoreDNS 和 K8s 构建云原生场景下的企业级 DNS
- 循环神经网络(RNN)可是在语音识别、自然语言处理等其他领域中引起了变革!
- 技术分享| 分布式系统中服务注册发现组件的原理及比较
- 利用谷歌地图采集外贸客户的电话和手机号码
- 跟我学Python图像处理丨关于图像金字塔的图像向下取样和向上取样
- 带你掌握如何使用CANN 算子ST测试工具msopst
- 一招教你如何高效批量导入与更新数据
- 一步步搞懂MySQL元数据锁(MDL)
- 你知道如何用 PHP 实现多进程吗?
- KubeSphere 网关的设计与实现(解读)