![](https://img-blog.csdnimg.cn/20201014180756919.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
多线程与高并发
文章平均质量分 92
yours_棒棒糖
间歇性踌躇满志,持续性混吃等死!!!难搞喔!!
生活不易,继续前行,为了成为最好的自己!
刷题记录,博客:https://github.com/can19960229/Candy_leetcode
展开
-
Java 并发高频面试题:聊聊你对 AQS 的理解?——ReentrantLock和AQS的关系
ReentrantLock和AQS的关系首先来看看,如果用java并发包下的ReentrantLock来加锁和释放锁,是个什么样的感觉?这个学过java的同学应该都会吧,毕竟是java并发基本API的使用,我们直接看一下代码:上面那段代码应该不难理解,无非就是搞一个Lock对象,然后加锁和释放锁。你这时可能会问,这个跟AQS有啥关系?关系大了去了!因为java并发包下很多API都是基于AQS来实现的加锁和释放锁等功能的,AQS是java并发包的基础类。举个例子,比如说ReentrantLock原创 2021-06-07 23:07:39 · 154 阅读 · 0 评论 -
【多线程与高并发】JMM内存模型 基础
JMM什么是JMMJMM是Java内存模型,不同的硬件生产商家和不同的操作系统下,内存的访问有一定的差异,java内存模型屏蔽掉各种硬件和操作系统的内存访问差异,以实现让java程序在各种平台下都能达到一致的并发效果。Java内存模型规定所有的变量都存储在主内存中,包括实例变量,静态变量,但是不包括局部变量和方法参数。每个线程都有自己的工作内存,线程的工作内存保存了该线程用到的变量和主内存的副本拷贝,线程对变量的操作都在工作内存中进行。线程不能直接读写主内存中的变量。不同的线程之间也无法访问对方工作原创 2021-05-28 23:24:03 · 379 阅读 · 1 评论 -
【多线程与高并发】volatile的底层原理与实现、缓存一致性、伪共享等问题
volatile的底层原理与实现volatile的底层原理:保证线程间变量的可见性。禁止CPU进行指令重排序。什么是缓存行缓存行(CacheLine)是位于CPU和内存中间的高速缓存。高速缓存一般分为三级,分别为L1、L2、L3说明:L1、L2位于核内,一个核独享。L3位于CPU内,多个核共享。缓存一致性协议在多核CPU中,由于存在高速缓存,一个数据会在多个核的高速缓存中存在副本,当一个核中的数据发生修改时,另一个核中的数据就会发生不一致性的情况,而缓存一致性协议就是为了CPU的原创 2021-05-28 23:23:38 · 243 阅读 · 0 评论 -
【多线程与高并发】CAS机制、volatile、synchronize
JUC——CAS机制及AtomicInteger源码分析CAS简介CAS即Compare And Swap对比交换,区别于悲观锁,借助CAS可以实现区别于synchronized独占锁的一种乐观锁,被广泛应用在各大编程语言之中。Java JUC底层大量使用了CAS,可以说java.util.concurrent完全是建立在CAS之上的。但是CAS也有相应的缺点,诸如ABA、cpu使用率高等问题无法避免。CAS机制中使用了3个基本操作数:内存地址V,旧的预期值A,要修改的新值B。更新一个变量的时候,只原创 2021-05-23 23:09:51 · 125 阅读 · 0 评论 -
【多线程与高并发】ThreadLocal 详解
ThreadLocal什么是ThreadLocalThreadLocal提供了线程的局部变量,每个线程都可以通过set()和get()来对这个局部变量进行操作,但不会和其他线程的局部变量进行冲突,实现了线程的数据隔离~。简要言之:往ThreadLocal中填充的变量属于当前线程,该变量对其他线程而言是隔离的。为什么有要用ThreadLocalThreadLocal可以让我们拥有当前线程的变量,那这个作用有什么用呢???(1)管理Connection**最典型的是管理数据库的Connection原创 2021-05-23 17:13:19 · 260 阅读 · 0 评论 -
【多线程与高并发】——线程池、线程池原理、线程池五种状态、线程池的七大参数
线程池线程什么是线程?线程是资源调度的最小单位,也是轻量级进程 LWP(Light Weight Process)创建线程的四种方式: 1、继承Thread类创建线程类 2、从线程池中获取 3、实现Runnable接口 Runnable接口不会返回结果或抛出检查异常,但是Callable接口可以 4、实现Callable接口和Future创建线程Java线程状态变化:线程创建之后它将处于 NEW(新建) 状态,调用 start() 方法后开始运行,线程这时候处于 REA原创 2021-05-21 17:48:55 · 371 阅读 · 0 评论 -
【多线程与高并发】线程间通信的两个面试问题——两个线程交替打印奇数和偶数
线程间通信同个进程下的线程之间都是共享进程的资源,只要是共享变量都可以做到线程间通信,比如全局变量对于线程间关注的不是通信方式,而是关注多线程竞争共享资源的问题,信号量也同样可以在线程间实现互斥与同步:互斥的方式,可保证任意时刻只有一个线程访问共享资源;同步的方式,可保证线程 A 应在线程 B 之前执行;常见问题:两个线程交替打印奇数和偶数实际就是wait()、notify()、notifyAll()的问题还可以用来实现数据库连接池等操作,即没有可用线程时使用wait等待,当其他线程执行完原创 2021-05-07 09:53:18 · 321 阅读 · 1 评论 -
【多线程与高并发】进程间通信的五种方式
进程间通信为什么要进程间通信?为了解决进程和进程之间共享数据的问题。管道管道可以分为两类:匿名管道和命名管道。匿名管道:它没有名字标识,匿名管道是特殊文件只存在于内存,没有存在于文件系统中,shell 命令中的「|」竖线就是匿名管道,通信的数据是无格式的流并且大小受限,通信的方式是单向的,数据只能在一个方向上流动,如果要双向通信,需要创建两个管道,再来匿名管道是只能用于存在父子关系的进程间通信,匿名管道的生命周期随着进程创建而建立,随着进程终止而消失。命名管道:突破了匿名管道只能在亲缘原创 2021-05-07 09:52:05 · 367 阅读 · 0 评论