c语言多线程访问一个变量_多线程+高并发+操作系统+网络+基础+调优+源码等xmind图整理好了...

前言

多线程并发问题,基本是面试必问的。

今年刚刚毕业准备找实习的同学或者经历过最近一段时间面试的朋友们,相应你们应该都有一个相同的问题被问到,那就是多线程与高并发

因为最近和腾讯、阿里包括字节和京东等一线大厂的面试负责人朋友在聊天的时候,他们给我共同的建议就是在面试的时候都要问一下对于多线程和高并发的理解,因为这些技术的理解决定了他们的项目在做的时候,他们所负责的部分深入到了什么程度。

相信说到这里,有很多朋友会回想自己的对于这些知识的理解,结果怎么样呢?

大部分同学应该都知道Synchronized,Lock,部分同学能说到volatile、并发包,优秀的同学则能在前面的基础上,说出Synchronized、volatile的原理,以及并发包中常用的数据结构,例如ConcurrentHashMap的原理。

这篇文章将总结多线程并发的各种处理方式,希望对大家有所帮助。

问题

1、开始之前,首先你要知道多线程和高并发都有哪些重点的知识要掌握吧

多线程

1d18bd6494b7671b50ff498bafeca49f.png

8f1dd505fdc70b5cdabeb9e3f289dd3a.png

并发

ac7cebafd7ba7eaf67d21a7dd616edbf.png

知道了这些问题或者说知识点之后,接下来我们就要研究下一个问题

2、多线程为什么会有并发问题

为什么多线程同时访问(读写)同个变量,会有并发问题?

  1. Java 内存模型规定了所有的变量都存储在主内存中,每条线程有自己的工作内存。

  2. 线程的工作内存中保存了该线程中用到的变量的主内存副本拷贝,线程对变量的所有操作都必须在工作内存中进行,而不能直接读写主内存。

  3. 线程访问一个变量,首先将变量从主内存拷贝到工作内存,对变量的写操作,不会马上同步到主内存。

  4. 不同的线程之间也无法直接访问对方工作内存中的变量,线程间变量的传递均需要自己的工作内存和主存之间进行数据同步进行。

哪知道了多线程并发问题的产生原因之后,接下来是不是就是要解决呀,今天的重点不是说解决方案,所以今天就不详细了,想知道详细解答方案的,可以下方,评论,我下一篇文章整理

面试

我们知道,平时敲代码牛逼的朋友,但是在面试的时候就卡壳,最后获得的职级和薪水可能还不如比他技术稍微差点的朋友,那原因在哪里呢?可能就是差在应试技巧上,毕竟在面试的时候不可能让你现场敲代码不是,那对于这些问题又该如何回答呢

当只有一个线程写,其它线程都是读的时候,可以用volatile修饰变量

当多个线程写,那么一般情况下并发不严重的话可以用Synchronized,Synchronized并不是一开始就是重量级锁,在并发不严重的时候,比如只有一个线程访问的时候,是偏向锁;当多个线程访问,但不是同时访问,这时候锁升级为轻量级锁;当多个线程同时访问,这时候升级为重量级锁。所以在并发不是很严重的情况下,使用Synchronized是可以的。不过Synchronized有局限性,比如不能设置锁超时,不能通过代码释放锁。

ReentranLock 可以通过代码释放锁,可以设置锁超时。

高并发下,Synchronized、ReentranLock 效率低,因为同一时刻只有一个线程能进入同步代码块,如果同时有很多线程访问,那么其它线程就都在等待锁。这个时候可以使用并发包下的数据结构,例如ConcurrentHashMap,LinkBlockingQueue,以及原子性的数据结构如:AtomicInteger。

面试的时候按照上面总结的这个思路回答基本就ok了。既然说到并发包,那么除了ConcurrentHashMap,其它一些常用的数据结构的原理也需要去了解下,例如HashMap、HashTable、TreeMap原理,ArrayList、LinkedList对比


而除了多线程与高并发,技术之间的连贯性,也会引出其他的相关问题,我们来看一下

操作系统

由多线程和高并发引出的第一个问题就是操作系统的相关内容

55383bdf84038f172e546ab453cf9eec.png

接下来

Java基础

839ec50da94c629193b83c83de74346b.png

fb272bea831f3b719051690238fae594.png

有了基础怎么能少了jvm调优

jvm调优

136f4c82e03212aa62da228d44bf8d27.png

调优方面,怎么能少了mysql呢

mysql

1d9801624791c53c18a79d89a7f65642.png

mysql优化

f31085a4a144a341c067a7adb0487150.png

spring

spring当然也要来凑凑热闹

561ea5820a361f2a329d83dd607813ff.png

网络

ebe0c2aa7ae3f6a337b5dd296c7f6865.png

消息队列

9594c2d2c95ebd38d28979f6a1a4cff3.png

更多

更多的我就不一一展示了,需要这些思维导图辅助整理自己知识体系的老铁,以及更多学习视频的老铁,资料已经上传到https://github.com/biws-byte/bws

有需要的老铁,自取

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值