写在前面

并发编程是Java程序员最重要的技能之一,也是最难掌握的一种技能。现在几乎100%的公司不但面试都必须问到并发编程,而且在日常工作和开发当中更是需要并发编程的使用,尤其是在互联网公司,它要求编程者对计算机最底层的运作原理有深刻的理解,同时要求编程者逻辑清晰、思维缜密,这样才能写出高效、安全、可靠的多线程并发程序。

并发编程笔记

计算机领域从来都不乏变革,每一次都带来新的机遇与挑战。“并发编程” 无疑是一场令人激动的变革。迎接技术变革与挑战,是软件开发者的空气和水。很高兴你已经读到了这里,那么请不要停下来,继续享受挑战的乐趣,继续面对这场变革,前进吧!

  • 进程
  • 线程
  • 并发
  • 并行

进程与线程

进程

  1. 程序由指令和数据组成,但这些指令要运行,数据要读写,就必须将指令加载至CPU,数据加载至内存。在指令运行过程中还需要用到磁盘、网络等设备。进程就是用来加载指令、管理内存、管理IO的
  2. 当一个程序被运行,从磁盘加载这个程序的代码至内存,这时就开启了一个进程。
  3. 进程就可以视为程序的一个实例。大部分程序可以同时运行多个实例进程(例如记事本、画图、浏览器等),也有的程序只能启动一个实例进程(例如网易云音乐、360 安全卫士等)

线程

  1. 一个进程之内可以分为到多个线程。
  2. 一个线程就是一个指令流 ,将指令流中的一条条指令以一定的顺序交给CPU执行
  3. Java中,线程作为最小调度单位,进程作为资源分配的最小单位。 在windows中进程是不活动的,只是作为线程的容器

并行与并发

(由于内容太多了,为了不影响大家的阅读体验,以下大量内容省略......Σ( ° △ °|||)︴)

并发编程共享模型篇

共享模型之管程

共享带来的问题

共享模型之内存

退不出的循环

共享模型之无锁

CAS与volatile

CAS的特点

共享模型之不可变

日期转换的问题

共享模型之工具

线程池

ThreadPoolExecutor

Executor线程配置

线程安全集合类概述

并发编程之原理篇

指令级并行原理

SuperScalar处理器

CPU缓存结构原理

.CPU缓存结构

CPU缓存一致性

MESI协议

  • E、 S、M状态的缓存行都可以满足CPU的读请求
  • E状态的缓存行,有写请求,会将状态改为M,这时并不触发向主存的写
  • E状态的缓存行,必须监听该缓存行的读操作,如果有,要变为S状态

volatile原理

volatile的底层实现原理是内存屏障,Memory Barrier ( Memory Fence )

  • 对volatile变量的写指令后会加入写屏障
  • 对volatile变量的读指令前会加入读屏障

如何保证可见性

final原理

Monitor原理

Monitor被翻译为监视器或管程

每个Java对象都可以关联一个Monitor对象,如果使用synchronized给对象上锁(重量级)之后,该对象头的Mark Word中就被设置指向Monitor对象的指针

synchronized原理进阶

轻量级锁

  • 轻量级锁的使用场景:如果一个对象虽然有多线程要加锁,但加锁的时间是错开的(也就是没有竞争) , 那么可以使用轻量级锁来优化。
  • 轻量级锁对使用者是透明的,即语法仍然是synchronized
  • 假设有两个方法同步块利用同一个对象加锁

自旋优化

重量级锁竞争的时候,还可以使用自旋来进行优化,如果当前线程自旋成功(即这时候持锁线程已经退出了同步块,释放了锁), 这时当前线程就可以避免阻塞。

偏向锁

  • 轻量级锁在没有竞争时(就自己这个线程), 每次重入仍然需要执行CAS操作。
  • Java 6中引入了偏向锁来做进一步优化: 只有第一次使用CAS将线程ID设置到对象的Mark Word头之后发现这个线程ID是自己的就表示没有竞争,不用重新CAS。以后只要不发生竞争,这个对象就归该线程所有

wait notify原理

park unpark原理

每个线程都有自己的一一个Parker对象

  • 线程就像一个旅人,Parker就像他随身携带的背包,条件变量就好比背包中的帐篷。counter 就好比背包中的备用干粮(0为耗尽,1为充足)
  • 调用park就是要看需不需要停下来歇息

如果备用干粮耗尽,那么钻进帐篷歇息.
如果备用干粮充足,那么不需停留,继续前进

  • 调用unpark,就好比令干粮充足

如果这时线程还在帐篷,就唤醒让他继续前进
如果这时线程还在运行,那么下次他调用park时,仅是消耗掉备用干粮,不需停留继续前进

ReentrantLock原理

条件变量实现原理

每个条件变量其实就对应着一个等待队列 ,其实现类是ConditionObject

读写锁原理

(以上省略大量图文内容.......,Σ( ° △ °|||)︴)

Semaphore原理

Semaphore有点像一个停车场, permits就好像停车位数量,当线程获得了permits就像是获得了停车位,然后停车场显示空余车位减一

为什么要有PROPAGATE

LinkedBlockingQueue原理

并发编程之模式篇

同步模式之保护性暂停

即Guarded Suspension,用在一个线程等待另一个线程的执行结果

要点

  • 有一个结果需要从一个线程传递到另一个线程,让他们关联同一个GuardedObject
  • 如果有结果不断从一个线程到另一个线程那么可以使用消息队列(见生产者/消费者)
  • JDK中, join的实现、Future的实现,采用的就是此模式
  • 因为要等待另一方的结果,因此归类到同步模式

同步模式之顺序控制

固定运行顺序

交替输出

异步模式之生产者/消费者

定义

异步模式之工作线程

创建多少线程池合适

自定义线程池

终止模式之两阶段终止模式

两阶段终止模式

线程安全单例

享元模式

BATJ并发编程高频面试题

  1. 现在几乎100%的公司面试都必须面试并发编程,尤其是互联网公司,对于并发编程的要求更高,并发编程能力已经成为职场敲门砖。
  2. 现在已经是移动互联和大数据时代,对于应用程序的性能、处理能力、处理时效性要求更高了,传统的串行化编程无法充分利用现有的服务器性能。
  3. 并发编程是几乎所有框架的底层基础,掌握好并发编程更有利于我们学习各种框架。想要让自己的程序执行、接口响应、批处理效率更高,必须使用并发编程。
  4. 并发编程是中高级程序员的标配,是拿高薪的必备条件。

借用Java并发编程实践中的话”编写正确的程序并不容易,而编写正常的并发程序就更难了”,相比于顺序执行的情况,多线程的线程安全问题是微妙而且出乎意料的,因为在没有进行适当同步的情况下多线程中各个操作的顺序是不可预期的,下面算是对多线程情况下同步策略的一个简单介绍。

这份【并发编程】【并发编程之模式篇】【并发编程之原理篇】【并发编程之应用篇】文档共有390页,需要完整版的朋友,可以点赞此文关注小编后,【见下图】来获取!!

当然,单单有文档看是远远不够的,还有视频和相匹配的课件进行学习提升,努力把并发编程这一块儿给搞明白,相信一定会有不凡的人生!!

多线程与高并发学习视频

多线程与高并发视频课件分享

多线程与高并发视频和课件获取,关注小编,【见下图】即可获取!

好了,今天就分享到这里了,希望大家能够好好学习,把并发编程这一块儿给提升上来,也希望本文能够得到大家的喜欢!!

solr 高并发_精妙绝伦!阿里资深架构师撰写这份:并发编程,可谓“独具匠心”...相关推荐

  1. 精妙绝伦!阿里资深架构师撰写这份:并发编程,可谓“独具匠心”

    写在前面 并发编程是Java程序员最重要的技能之一,也是最难掌握的一种技能.现在几乎100%的公司不但面试都必须问到并发编程,而且在日常工作和开发当中更是需要并发编程的使用,尤其是在互联网公司,它要求 ...

  2. 你和阿里资深架构师之间,差的不仅仅是年龄(进阶必看)

    导读:阅读本文需要有足够的时间,笔者会由浅到深带你一步一步了解一个资深架构师所要掌握的各类知识点,你也可以按照文章中所列的知识体系对比自身,对自己进行查漏补缺,觉得本文对你有帮助的话,可以点赞关注一下 ...

  3. python爬虫架构师之路_一位资深 架构师大牛给予Java技术提升的学习路线建议

    一位资深 架构师大牛给予Java技术提升的学习路线建议 对于工作多年的程序员而言,日后的职业发展无非是继续专精技术.转型管理和晋升架构师三种选择. 架构师在一家公司有多重要.优秀架构师需要具备怎样的素 ...

  4. 你和阿里资深架构师之间,差的不仅仅是年龄(进阶必看) 1

    读:阅读本文需要有足够的时间,笔者会由浅到深带你一步一步了解一个资深架构师所要掌握的各类知识点,你也可以按照文章中所列的知识体系对比自身,对自己进行查漏补缺,觉得本文对你有帮助的话,可以点赞关注一下. ...

  5. 十年阿里资深架构师教你如何做到年薪50万的程序员(文末附送学习资料)

    写在开篇 不管是开发.测试.运维,每个技术人员心里都有一个成为技术大牛的梦,毕竟"梦想总是要有的,万一实现了呢"!正是对技术梦的追求,促使我们不断地努力和提升自己. 然而" ...

  6. 阿里资深架构师倾情力荐:Java 全线成长宝典,P5 到 P8 一应俱全

    前言 对于大部分的程序员来说,清晰地规划自己的职业发展并不是一件容易的事情.作为一个曾经底子比较差,从底层摸爬滚打多年走过来的程序员,在这里分享一下对我帮助很大的一份宝典,希望同行们能快速掌握这些技术 ...

  7. 阿里资深架构师倾情力荐:Java全线成长宝典,P5到P8一应俱全

    前言 对于大部分的程序员来说,清晰地规划自己的职业发展并不是一件容易的事情.作为一个曾经底子比较差,从底层摸爬滚打多年走过来的程序员,在这里分享一下对我帮助很大的一份宝典,希望同行们能快速掌握这些技术 ...

  8. 阿里资深架构师整理2022年秋招最新面试题汇总:208页核心体系

    进大厂是大部分程序员的梦想,而进大厂的门槛也是比较高的,所以这里整理了一份阿里.美团.滴滴.头条等大厂面试大全其中概括的知识点有:Java基础.spring.springmvc.springboot. ...

  9. c++11 多线程 顺序执行_前阿里P8架构师总结的一些关于Java多线程的编程经验丨干货...

    推荐阅读 Java程序员备战"金九银十"必备的面试技巧(附阿里Java岗面试题) 一.认识多任务.多进程.单线程.多线程 要认识多线程就要从操作系统的原理说起. 以前古老的DOS操 ...

最新文章

  1. python3下载文件-在Python 3中从web下载文件?
  2. python 带随机指针的链表深度复制_LeetCode:复制带随机指针的链表
  3. Python:python语言中与时间有关的库函数简介、安装、使用方法之详细攻略
  4. 安卓2.2刷机包_老用户福音 努比亚为红魔电竞手机和Z17用户更新安卓9.0
  5. python 系统托盘_使用 PySide 实现 Python 系统托盘图示
  6. pymysql.err.InternalError: (1054, Unknown column '27D24A3B' in 'where clause')之错误解决
  7. python3 字符串格式化_Python3-字符串格式化
  8. iPhone 诈骗又出新招,别看见弹窗就输密码
  9. 《工业控制网络安全技术与实践》一2.2 分布式控制系统
  10. 批处理Delims的基本知识
  11. FTP的主、被动模式
  12. 学习 Cesium (五):加载离线高程数据
  13. 【递归算法】递归算法的快速入门
  14. VUE中隐藏和限制DIV或其他HTML元素
  15. 【css】使用 canvas 画一个圆、贝塞尔曲线画对话气泡
  16. Windows10商店安装Ubuntu 18.04 LTS
  17. Visual Studio 2008 (vs 2008)简体中文专业版、团队版及SP1下载地址
  18. Python爬虫的起点!学爬虫从起点开始!
  19. #osp: INITIALIZATION ERROR --> #osp:api: could not find module initializer
  20. 免费网站源码分享平台 有哪些好的源码网站

热门文章

  1. offset、scroll、client三大家族
  2. a上标3下标6算法_a上标3下标6算法_Word中同时设置上标下标
  3. CSDN高校俱乐部2012年秋季巡讲安排及讲师介绍
  4. TeleGram都有哪些限制?
  5. 中国地质大学武汉计算机学院吴越,计算机学院朱静副教授个人主页 中国地质大学(武汉)教师个人主页系统...
  6. Python入门——组合数据类型
  7. Spring MVC 学习总结(一)——MVC概要与环境配置 转载自【张果】博客
  8. Redis 使用手册
  9. 黑盒测试和白盒测试,覆盖率的测试
  10. 浏览器自动旋转图片问题的解决方式