1、上下文切换

上下文定义

cpu发生进程或者线程切换时,所依赖的数据集合,比如一个函数有外部变量,函数运行时,必须获取外部变量,这些变量值的集合就是上下文。

引发问题

对于CPU密集型任务,多线程处理会发生上下文切换,会影响到执行速度,如果时IO密集型,多线程技术优点尽显。

如何减少上下文切换

  • 无锁并发编程,锁的获取与释放会发生上下文切换,多线程时会影响效率。无锁并发编程就是将数据分块,每个线程处理各自模块。比如LongAdder中部分代码。
  • CAS算法,并发编程时通过CAS算法更新数据,而不必加锁。如Java的atomic包下的工具类。
  • 使用最少线程,减少不必要的线程创建,自定义线程池。
  • 使用协程,在单线程中维护多任务调度,处理任务间切换,Golang对于协程的使用很强大。

2、死锁

死锁定义

死锁是进程死锁的简称,是由Dijkstra于1965年研究银行家算法时首先提出来的。
系统发生死锁现象不仅浪费大量的系统资源,甚至导致整个系统崩溃,带来灾难性后果。

产生死锁原因

  • 系统资源不足
  • 进程推进顺序不当
  • 资源分配不合理

死锁产生的必要条件

  • 互斥条件:一个资源只能被一个进程或者线程使用。
  • 请求和保持条件:一个进程或者线程,请求资源的时候发生阻塞,对已经获取的资源保持不放。
  • 不可剥夺条件:进程或者线程以获得的资源,在未使用完成时,不能强行剥夺。
  • 循环等待条件:若干进程或者线程形成一种头尾相接的循环等待的资源关系。

这四分条件是死锁产生的必要条件,只要发生死锁,这些条件必然成立,而只要上述条件之一不满足,就不会发生死锁。

如何避免死锁

  1. 以确定的顺序获得锁
  2. 加锁时限

Lock接口提供了boolean tryLock(long time, TimeUnit unit) throws InterruptedException方法,该方法可以按照固定时长等待锁,因此线程可以在获取锁超时以后,主动释放之前已经获得的所有的锁。

总结

我们总是喜欢瞻仰大厂的大神们,但实际上大神也不过凡人,与菜鸟程序员相比,也就多花了几分心思,如果你再不努力,差距也只会越来越大。实际上,作为程序员,丰富自己的知识储备,提升自己的知识深度和广度是很有必要的。

送大家一份资料,戳这里免费领取

Mybatis源码解析

Mybatis源码解析

[外链图片转存中…(img-NEmrPvqX-1624875942009)]

Java架构师教你如何突破瓶颈,持续更新中相关推荐

  1. Java架构师教你如何突破瓶颈,下载量瞬秒百万

    基于 Servlet 容器的 Web MVC 身为 Java 开发者,对于 Spring 框架并不陌生.它起源于 2002 年.Rod Johnson 著作<Expert One-on-One ...

  2. Android架构师教你如何突破瓶颈,快来收藏!

    谈起性能优化,我想问, 什么是性能优化?你的理解呢? **首先什么是性能:**在同一个手机里面,同样功能的app,哪个跑的快,哪个不卡,哪个就性能高.我们这篇文章就是解决那些性能慢的问题: 1)我们要 ...

  3. 面试JAVA常被问到的问题(持续更新中)

    引言 有的面试会被问到有没有写博客,这时候我尴尬,不知道怎么回答,所以这篇文章仅仅是把我面试JAVA的遇到的问题记录下来而已,也算是我写博客迈出的第一步,起码,以后被问到:有没有写博客?我可以回答,我 ...

  4. mysql 左连接b表的一条数据_阿里java架构师教你怎么用mysql怒怼面试官

    转载地址: 阿里java架构教你怎么用mysql怒怼面试官​www.jianshu.com 说一下mysql比较宏观的面试,具体咋写sql的这里就不过多举例了.后面我还会给出一个关于mysql面试优化 ...

  5. 10年java架构师教你如何快速打好Java基础?

    从大学到现在,我使用Java已经将近10年,日常也带实习生,还在公司内部做training,所以可以分享下我的经验,希望对你有用. 因为是在工作中培训,就必然有两个约束:实用.时间紧,因此就不能像大学 ...

  6. 信息系统项目管理师第一章复习内容(持续更新中……)

    信息系统项目管理师含金量及证书作用? 1.软考以考代评,软考证书可以只用用来评相应的级别的职称,高项高级证书可以用于聘任高级工程师职务.这也是全国唯一能以考代评获取职称的资格考试! 2.软考证书可以用 ...

  7. 总结Java开发面试常问的问题,持续更新中~

    数据库 mysql redis java java虚拟机 java并发 java容器 java基础 计算机网络 数据结构与算法 操作系统/Linux 设计模式 场景题和设计题 流行框架 数据库 mys ...

  8. Java学习资料汇总(吐血分享)----持续更新中

    java学习攻略: 1.javase  html  css  javascript 历经5年锤炼(史上最适合初学者入门的Java基础视频) Java基础教程(java入门学习第一免费视频下载) Jav ...

  9. 一年java工作经验的面试题总结(持续更新中)

    本人是17年6月份毕业的,3月份出来实习,算起来也是工作一年了吧,金三银四,博主也考虑换一份工作,于是最近面试了几家,总结一下面试中的问题,大家一起交流学习. 第一次面试 ①说下java类的加载 ②说 ...

最新文章

  1. 【Laravel-海贼王系列】第七章,Pipeline 类解析
  2. 基于struts2拦截器实现用户操作日志记录
  3. BZOJ 3489: A simple rmq problem
  4. 【Java学习笔记十一】图形用户界面
  5. unity android sd卡路径,一、文件与路径——2、unity路径特点写法和文件读写全攻略...
  6. Weakness and Poorness
  7. Java Socket编程(一)TCP/IP简介
  8. 应届毕业生面试程序员自我介绍
  9. 微信公众号首次关注自动回复图文消息
  10. win7 cmd 无法复制粘贴
  11. 纺织服装产业实现智能制造升级
  12. 高通8953 Android 9.0 打开user调试串口
  13. js中浏览器失焦获焦的几种结局方法
  14. SAP 常用的库存表
  15. 数据分析过程中,我们常犯的错误有哪些?
  16. python 爬虫爬取无损图片 批量下载wallhaven超清壁纸
  17. [竞赛图判定定理]兰道定理(Landau's Theorem)介绍及其一种证明
  18. 2021年2月16日 星期二 农历初五 晴 天津
  19. Hadoop权威指南(第二版)pdf中文版
  20. 震惊!十六岁少女竟然被三名阿里p8老师讲解{常见面试题汇总}

热门文章

  1. Floyd算法应用-医院选址问题
  2. 4.3.3版本之引擎bug
  3. [Z]POJ 计算几何入门题目推荐[转PKKJ]
  4. 无线智能路由器家长控制宽带
  5. mysql导出表结构 创建_mysql如何导出表结构为文本文件
  6. maya崩溃自动保存路径_maya 使用swig将插件编译成pyd,无缝使用内置数据实现加速计算模块...
  7. word公式插件_再也不用担心我的公式写不出来了:一款公式输入神器实测
  8. c free语言自定义函数,C 语言free函数的工作原理
  9. php 批量更新死锁,php – 在尝试获取锁定时,哪个查询导致死锁;尝试重新启动事务...
  10. C++多线程快速入门(四)shared_mutex以及读写锁应用