- 博客(7)
- 收藏
- 关注
原创 多线程三:解决原子性问题-互斥锁
一:互斥“同一时刻只有一个线程执行”这个条件非常重要,我们称之为互斥。如果我们能够保证对共享变量的修改是互斥的,那么, 无论是单核 CPU 还是多核 CPU,就都能保证原子性了。二:锁的分类1.悲观锁/乐观锁悲观锁:总是假设最坏的情况,每次去拿数据的时候都认为其他线程会修改,所以每次拿数据的时候都会加锁,其他线程只能等待,java里面的同步原语 synchronized关键字就是典型的悲观锁。乐观锁:总是假设最好的情况,每次拿数据的时候认为不会有其他线程修改,所以不会加锁,但是在更新数据
2021-01-29 14:39:02 226
原创 多线程二:解决可见性和有序性问题-java内存模型
一:Java内存模型的由来计算机为平衡CPU与内存的速度差异,在与内存的交互之间加了一层高速缓存(我们称之为CPU缓存)。运算时先把数据加载到自己的缓存中,计算完成后再刷新回主内存,很显然在多核CPU的架构中,将可能导致各自的缓存数据不一致。如果真的发生了缓存不一致的问题,那同步回到主内存时以谁的缓存数据为准呢?为了解决缓存一致性问题,需要各个处理器在访问缓存时都遵守一些协议,在读写时根据这些协议来进行操作。本文讨论的内存模型可以理解为在特定的操作协议下对特定的内存和高速缓存进行的读写访问的过程
2021-01-29 14:06:31 147
原创 多线程一:并发问题的起源
一:CPU,内存,I/O设备的速度差异这些年,我们的 CPU、内存、I/O 设备都在不断迭代,不断朝着更快的方向努力。但是,在这个快速发展的过程中,有一个核心矛盾一直存在,就是这三者的速度差异。CPU 和内存的速度差异可以形象地描述为:CPU 是天上一天,内存是地上一年(假设 CPU 执行一条普通指令需要一天,那么 CPU 读写内存得等待一年的时间)。内存和 I/O 设备的速度差异就更大了,内存是天上一天,I/O 设备是地上十年。二:系统的优化为合理利用CPU的高性能,平衡三者之间的速度
2021-01-29 10:09:01 162
原创 java内存结构和垃圾收集
一:Java运行时数据区域的划分JVM运行时区域可以划分为程序计数器 虚拟机栈 本地方法栈 堆 方法区,JDK1.8开始HotSpot虚拟机将方法区(永久代PermGen)移除,取而代之的是元空间。其中程序计数器 虚拟机栈 本地方法栈 是线程私有的,堆和方法区是线程共享的。 如下图所示:1:程序计数器程序计数器是一块较小的内存空间,主要用来存储当前线程所执行字节码指令的地址或者叫行号指示器。由于java虚拟机的多线程是通过线程切换和分配CPU时间片的方式来实现的,同一时刻一个C
2021-01-29 09:53:09 97
原创 事务的隔离级别和传播机制
一 数据库的四大特性:1.原子性:指事务所包含的操作要么全部成功,要么全部失败回滚。2.一致性:指事务执行之前和执行之后都必须处于一致性状态。比如A账户和B账户加起来总共100快,那么不管AB之间如何转帐,AB加起来还的是100块,这就是事务的一致性。3.隔离性:指多个用户并发访问数据库时,数据库为每个用户开启的事务不能被其他事务所干扰,多个并发事务要相互隔离。4.持久性:指一个事务一旦...
2018-08-09 13:27:17 948
原创 Java集合体系概述
一、集合框架图Java的集合类主要由两个接口派生而出:Collection和Map,Collection和Map是Java集合框架的根接口,这两个接口又包含了一些子接口或实现类。1:List集合:ArrayList LinkedList Vector 有序 可重复2:Set集合:HashSet LinkedHashSet TreeSet 无序 不可重复3:Map集合:HashMap...
2018-08-09 11:36:15 509
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人