Java微服务架构师—并发编程基础(上)

8年开发经验精华,从小白到工作8年Java高级架构师路线谱 从小白级到工作8年需要掌握的技术栈大概如下: 0-1年入门: Java基础复盘(面向对象+Java的超类+Java的反射机制+异常处理+集合+泛型+基础IO操作+多线程+网络编程+JDK新特性) Web编程初探(Servlet+MySQL数据库+商品管理系统实战) SSM从入门到精通(Spring+SpringMVC+Mybatis+商品管理系统实战-SSM版+Git+Maven) SpringBoot快速上手(SpringBoot+基于SpringBoot的商品管理系统实战) 零距离互联网项目 阅读详情

Java并发编程基础

并发安全

  • 案例

    • 集合遍历问题(list)
    • 共享成员变量
  • 线程安全的集合

  • 线程安全概念

  • 编码规约

    • 考虑代码健壮性
    • 常见场景敏感性

同步类容器(串行)

  • 同步锁

    • Vector
    • HashTable
  • 底层机制

    • 都是由JDK的Collections.synchronized***等工厂方法去创建实现的
    • 使用synchronized关键字对每个公用的方法都进行同步
    • 使用Object mutex对象锁使得每次只能有一个线程访问容器的状态
  • 问题

    • 还可能出现(并发修改异常)
    • 并发处理性能差
    • 并发场景下,严重降低吞吐量
    • 锁竞争

并发类容器(异步)jdk1.5开始

  • ConcurrentHashMap

    • 基本使用

      • size()

        • 消除伪共享(缓存行)
        • 分之思想
        • volatile long value
    • 基本原理

      • 内部结构使用段(Segment)来表示不同的部分,每一段其实就是一个小的HashTable升级版,它们有自己的锁,降低了锁的粒度
      • 只要多个修改操作发生在不同的段上,就可以并发进行,默认16段,所以最高支持16个线程的并发修改操作
      • 减小锁的粒度达到降低锁竞争的方式,并且代码中大多共享变量采用volatile关键字声明,目的是第一时间获取修改的内容,性能非常好。
  • CopyOnWrite

    • 基本使用

      • jdk中常用的

        • CopyOnWriteArrayList
        • ConyOnWriteArraySet
      • 最佳使用场景

        • 读多写少,元素不能太多
    • 基本原理

      • 往一个容器添加元素时,不直接往当前的容器添加,而是将当前容器进行Copy,复制出一个新容器,然后新容器里添加元素,添加完元素之后,再将原容器的引用指向新的容器。
      • 采用读写分离的思想,读和写不同的容器,实现对CopyOnWrite容器进行并发的读,而不需要加锁,因为当前这个容器不会添加任何的元素。
  • ConcurrentSkipListMap

    • 支持并发排序

队列

  • (顶层接口Queue)

    • 并发队列(ConcurrentLinkedQueue)

      • 适应高并发场景的队列,通过无锁的方式,实现高并发状态下的高性能,通常性能好于BlockingQueue,是一个基于链表的无界线程安全队列

      • 该队列遵循先进先出原则,头是最先加入,尾是最后加入,该队列不允许null元素。

      • 基本使用

        • add()和offer()都是添加元素方法,在这里这两个方法没有任何区别
        • poll()和peek()都是取头元素节点,区别在于前者是会删除元素,后者不会
    • 阻塞队列(BlockingQueue)

      • 基本使用

        • offer(anObject) 将anObject加到BlockingQueue里,即如果BlockingQueue可以容纳则返回true,否则返回false (不会阻塞线程)
        • offer(E e, long timeout ,TimeUint uint ) 设置等待时间,如果指定时间内,还不能往队列加入则返回失败。
        • put() 把anObject加入BlockingQueue里,如果BlockingQueue没有空间,调用此方法的线程会被阻塞直到队列里有空间为止。
        • poll(long timeout,TimeUint uint) 从队列里取出一个队首元素,如果在指定时间内,队列一旦有元素可取,则立即返回队列中的元素,否则直到时间超时还没有元素可取,返回失败。
        • take()取出BlockiQueue里排在队首的元素,若队列为空,阻塞进入等待状态直到队列有新的元素被加入。
        • drainTo() 一次性从队列获取所有可用的元素(还可以指定获取的个数),通过该方法,可以提高获取元素的效率,不需要多次分批加锁或释放锁。
      • 常用实现

        • 基于数组的阻塞队列实现ArrayBlockingQueue

          • 内部维护一个定长数组,缓存队列中的数据元素,其内部没有实现读写分离,也就意味着生产和消费不能完全并行。长度需要定义,可以指定先进先出或者先进后出,由于是定长所以也叫有界队列。
          • 子主题 2
        • LinkedBlockingDeque

        • PriorityBlockingQueue

          • 基于优先级的阻塞队列,出队列是依据优先级
          • 优先级的判断是通过构造函数传入的Compator对象来决定,也就是说传入的队列的元素必须实现Comparable接口,在实现PriorityBlockingQueue时,内部控制线程同步的锁采用的是公平锁,也一个无界队列。
          • 元素不能为基本类型
        • SynchronousQueue

          • 一种没有缓冲的阻塞队列
          • 生产者生产的数据直接会被消费者获取并消费
        • DelayQueue

          • 带有延迟时间的队列
          • 其中的元素只有指定延迟时间到了,才能够从队列中获取到该元素,DelayQueue的元素必须实现Delayed接口,该队列是一个无界队列,应用场景:对缓存超时的数据进行移除,任务超时处理,空闲链接超时关闭等。
    • 阻塞队列手写模拟

      • 拥有固定长度的装载元素的容器
      • 计数器统计容器的容量大小
      • 当队列里面没有元素的时候需要执行线程等待
      • 当队列元素已满的时候执行的线程也需要等待
      • 合理的线程间通信

锁

  • 常见锁

    • 同步锁
    • Lock
    • LockSupport
  • 子主题 2

JUC

  • AQS
  • CAS
  • 分类

分布式中间件

缓存组件Redis

微服务架构

Spring Boot

高并发架构

高性能架构

项目架构设计实战

XMind - Trial Version

从.har文件到Postman集合:一键转换的完整教程(附避坑指南) 本文详细介绍了如何将.har文件高效转换为Postman集合的完整教程,涵盖基础操作到高级技巧,包括认证信息处理、环境变量提取等痛点问题的解决方案。通过抓包工具记录的.har文件,开发者可以快速生成Postman集合,提升API调试与测试效率,特别适合前后端分离开发模式下的团队协作。 阅读详情

相关推荐

【毕设】基于LoRa的物联网控制器:从原理图到PCB的完整硬件设计指南

本文提供了一份完整的基于LoRa的物联网控制器硬件设计指南,涵盖从系统框图、原理图设计到PCB布局布线的全流程。详细讲解了电源电路、单片机最小系统、信号接口以及LoRa无线模块等核心模块的设计要点与抗干扰技巧,并分享了实用的调试心得,旨在帮助电子、物联网专业学生顺利完成毕业设计,掌握低功耗远距离物联网节点的硬件开发实践。

weixin_42126677的博客 307

java学习日程_如何在忙碌的日程中找时间学习

java学习日程by Zell Liew 由Zell Liew 如何在忙碌的日程中找时间学习 (How to find time in your busy schedule to learn) You’re drained after work. All you want to do is relax on the couch. On weekends, you want to spend t...

1095

UniApp 与 Taro 深度解析:如何根据项目需求选择最佳跨平台框架?

本文深度对比了UniApp和Taro两大主流跨平台开发框架。UniApp基于Vue生态,提供开箱即用的高效开发体验,尤其适合快速覆盖多端小程序;Taro则根植React范式,架构灵活,便于与现有React生态集成,更适合对性能和原生体验有高要求的复杂项目。文章结合团队技术栈、项目类型及性能需求,为开发者提供了清晰的选型指南。

snow3的博客 204

Java微服务架构师—并发编程基础(下),阿里再次定义互联网实战案例

包含最全MySQL、Redis、Java并发编程等等面试题和答案,用于参考~

2301_78416543的博客 1085

Kettle Web版部署指南

看到以上的日志则表示启动成功。

2401_89221867的博客 1719

5种主流触觉传感器对比:GelSight、DIGIT、Taxim、GelSlim和TACTO如何选?

本文深度解析了GelSight、DIGIT、Taxim、GelSlim和TACTO五款主流触觉传感器的技术原理与核心特性。通过对比视觉传感与电学传感两大技术路径,为机器人灵巧抓取、精密检测等应用场景提供清晰的选型决策指南,帮助开发者根据项目需求在分辨率、响应速度、集成度与成本之间找到最佳平衡。

Black的专栏 932

Python进阶----进程之间通信(互斥锁,队列(参数:timeout和block),), ***生产消费者模型...

Python进阶----进程之间通信(互斥锁,队列(参数:timeout和block),), ***生产消费者模型 一丶互斥锁 含义: ​​​每个对象都对应于一个可称为" 互斥锁" 的标记,这个标记用来保证在任一时刻,只能有一个线程访问该对象(串行) 目的: ​​来保证共享数据操作的完整性和安全性(文本数据),保证数据的公平性 区别join: ​​共同点: 都能实现cp...

dayinji1212的博客 649

DISM错误87详解:RestoreHealth选项无法识别的修复方法

DISM(部署映像服务和管理工具)是Windows系统维护与修复的核心命令行工具,常与SFC(系统文件检查器)配合使用,用于扫描和修复组件存储损坏、系统文件缺失等问题。在执行系统健康检查时,用户常会遭遇错误87,提示“未在此上下文中识别出restorehealth选项”。该错误的本质并非工具损坏,而是命令参数结构不符合DISM的语法解析规则,或当前系统环境(如Windows 7、WinRE/PE、32位环境)不支持该参数。理解DISM的命令层级、参数挂载关系以及运行上下文,是精准排除故障的前提。通过核对标准

weixin_34116482的博客 490

BLOCKTIMEOUT 配置参数

BLOCKTIMEOUT 配置参数

kelei2010的博客 805

手机开发实战58——小区广播介绍2

业务 针对小区广播短消息的特点,可以提供一些基于目前短消息不能或不适合提供的服务: 1. 显示网络服务基站名称:用户可以随时了解手机登记在哪个基站下,特别是在边界交叉覆盖区域,用户可以清楚的知道通话建立在哪个基站下,在用户投诉和故障描述中也会有所帮助; 2. 提供用户问候信息:可以在覆盖机场、车站等地区的基站广播一些用户问候语或一些企业形象广告语; 3. 充分利用小区广播地

xjbclz的专栏 772

向华为学习——解读158页 华为敏捷园区网技术解决方案【附全文阅读】

华为敏捷园区网解决方案通过策略随行和体验随身技术,满足移动办公场景下的网络需求。该方案采用敏捷交换机和防火墙自动执行策略配置,实现用户身份认证与业务策略的无缝衔接,且策略配置与IP地址解耦,简化了管理流程。相比传统技术,该方案有效解决了用户分级、QoS保障、无线接入等关键问题,确保用户在移动过程中获得一致的网络体验。

cdfunlove的博客 381

2024年最新架构师必备技能:微服务架构,Java面试题2024

我想问下大家当初选择做程序员的初衷是什么?有思考过这个问题吗?高薪?热爱?既然入了这行就应该知道,这个行业是靠本事吃饭的,你想要拿高薪没有问题,请好好磨练自己的技术,不要抱怨。有的人通过培训可以让自己成长,有些人可以通过自律强大的自学能力成长,如果你两者都不占,还怎么拿高薪?架构师是很多程序员的职业目标,一个好的架构师是不愁所谓的35岁高龄门槛的,到了那个时候,照样大把的企业挖他。为什么很多人想进阿里巴巴,无非不是福利待遇好以及优质的人脉资源,这对个人职业发展是有非常大帮助的。

2401_84692141的博客 420

STM32实战开发(128):智能位移检测 - 使用STM32实现位移检测

STM32作为一款功能强大的微控制器,由于其出色的处理能力、丰富的外设接口和低功耗特点,成为实现智能位移检测系统的理想选择。未来,可以通过结合更多传感器、多种数据处理算法以及云平台技术,进一步提升系统的智能化水平,优化位移测量的精度和稳定性。本篇博客将介绍如何使用STM32微控制器实现智能位移检测系统,涉及硬件设计、传感器选择、软件开发等多个方面,提供详细的设计步骤,并给出完整的代码示例,帮助开发者快速搭建智能位移检测系统。蜂鸣器连接到STM32的GPIO端口,当位移超过设定的阈值时,蜂鸣器发出警报。

2201_76125393的博客 901

Java微服务架构师—并发编程基础(下)

AtomicLong同步类容器(串行)

2501_90425225的博客 829

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

网上java培训课程,值得一看

part 1Java基础核心技术总结 万事都离不开根基,Java基础对于一些老鸟来说可能已经很熟悉了,但是对于很多开发5年以下的朋友掌握的或许不是很牢固,因此这份笔记更适合温故而知新。 Part 2并发编程(架构师筑基必备) 并发编程都掌握不好,你凭什么写出优质的代码? 大厂必问并发编程技术栈,都在这张图上了: Part 3JVM(架构师筑基必备) JVM和并发编程都是Java语言中非常重要的技术点,同时也是带有一定难度的基础内容,在面试过程中JVM也是常问的面试内容。 P8大佬自编笔记—

m0_58269520的博客 1256

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

Java微服务架构师—并发编程基础(上),java面试常见问题与答案pdf

底层机制都是由JDK的Collections.synchronized***等工厂方法去创建实现的使用synchronized关键字对每个公用的方法都进行同步使用Object mutex对象锁使得每次只能有一个线程访问容器的状态问题还可能出现(并发修改异常)并发处理性能差并发场景下,严重降低吞吐量锁竞争。

2301_82242296的博客 976

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

50w字+的Java技术类校招面试题汇总,HR的话扎心了

前言 刚刚过去的双十一,让“高性能”“高可用”“亿级”这3个词变成了技术热点词汇,也让很多人再次萌发成为「架构师」的想法。先问大家一个问题:你觉得把代码熟练、完成需求加上点勤奋,就能成为架构师么?如果你这么认为,那你注定只能是“码农”。从业这么多年,我见过太多普通程序员做到架构师的例子,但更多的人在听话地把需求做出来,既不考虑更优解,也不考虑技术原理,重复千篇一律的代码,以为只要代码写的好就能做「架构师」前段时间,还有哥们儿吐槽说,他们公司的架构师编程能力还不如他,伤感自己”怀才不遇“。但其实,架构师看的是

m0_57285325的博客 375

Java微服务架构师—并发编程基础(思维导图)

Coder_Boy_的博客 380

java虚拟机的工作原理,程序员Java笔记

做任何事情都要用心,要非常关注细节。看起来不起眼的、繁琐的工作做透了会有意想不到的价值。当然要想成为一个技术大牛也需要一定的思想格局,思想决定未来你要往哪个方向去走, 建议多看一些人生规划方面的书籍,多学习名人的思想格局,未来你的路会走的更远。更多的技术点思维导图我已经做了一个整理,涵盖了当下互联网最流行99%的技术点,在这里我将这份导图分享出来,以及为金九银十准备的一整套面试体系,上到集合,下到分布式微服务[外链图片转存中…(img-gkriNAYk-1709886686305)]

2401_83330193的博客 917

java进阶架构师,需要哪些技能?3个方面挺简单的嘛!

操作系统、网络协议(HTTP/S、网络状态、长连接、TCP、滑动窗口、网络参数、通信模型、序列化、爬虫、netty)、数据结构(队列、栈、链表、数组、字典、图、二叉树、平衡二叉树、红黑树、B+树、LSM树)、基本算法、数据库基础。基本运维、安全、微服务、分布式系统、中间件、分库分表Sharding、消息队列、缓存:Redis(常用数据类型、哨兵、集群、最佳实践、千万级排行榜、分布式锁、限流、缓存同步、使用规范)java进阶架构师:java基础。java进阶架构师:基础。java进阶架构师:进阶。

Netty711的博客 461

万字Java技术类校招面试题汇总,金三银四Java高级工程师面试题整理

我觉得,但凡是个成年人应该都清楚扎实的基本功对自己的工作帮助有多重要。从各大招聘网站的招聘要求来看,第一条都明确说明需要扎实的Java基础。因此,一般笔试以及面试的第一轮,对基础的考察是比较多的。其实我发现有很多开发几年了,基础知识都不扎实,比如说,简单地介绍一下Java8有哪些新特性吗,或者你比较擅长的新特性有哪些?要么回答的不完整,要么就是回答的牛头不对马嘴。

2401_83411843的博客 967
上一篇: 前端架构之 React技术栈-React 0001_全栈工程师技能
下一篇: Java微服务架构师—并发编程基础(下)
Coder_Boy_
博客等级 码龄10年 2804粉丝 819原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Coder_Boy_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值