hintheshell / concurrency Goto Github PK
View Code? Open in Web Editor NEW多线程 并发编程学习
多线程 并发编程学习
2.典型的冲突类型
1.丢失更新: 一个事务的更新覆盖了其它事务的更新结果
用户A把值从6改为2,用户B把值从2改为6,则用户A丢失了他的更新。
2.脏读:当一个事务读取其它完成一半事务的记录时,就会发生脏读取。例如:用户A,B看到的值都是6,用户B把值改为2,用户A读到的值仍为6。
3.并发控制的机制
悲观锁:假定会发生并发冲突,屏蔽一切可能违反数据完整性的操作。
乐观锁:假设不会发生并发冲突,只在提交操作时检查是否违反数据完整性。 乐观锁不能解决脏读的问题。
乐观锁(Optimistic Lock):乐观,认为每次拿数据的时候别人都不会修改,所以不会上锁,但是在更新的时候做一下简单的判断在此期间有没有人去更新数据,使用版本号等机制。适用于多读的操作。
优缺点:乐观锁吞吐量高 省去了锁的开销,但是如果经常冲突,则一直retry会造成性能损失,这种情况适合悲观锁
5.乐观锁应用
1 版本号
2 时间戳
注:对于以上两种方式,Hibernate自带实现方式:在使用乐观锁的字段前加annotation: @Version, Hibernate在更新时自动校验该字段。
当多个线程访问某个类时,不管运行时环境采用何种调度方式或者这些进程如何交替执行,并且不需要任何额外的同步和协同,这个类都能表现出正确的行为,那么这个类是线程安全的。
提供了互斥访问,同一时刻只能有一个线程来对它进行操作
一个线程对主内存的修改可以及时的被其他线程观察到
一个线程观察其他线程中的指令执行顺序,由于指令重排序的存在 ,该观察结果一半杂乱无序
在Java虚拟机规范中试图定义一种Java内存模型(Java Memory Model,JMM)来屏蔽各个硬件平台和操作系统的内存访问差异,以实现让Java程序在各种平台下都能达到一致的内存访问效果。
那么Java内存模型定义了程序中变量的访问规则,往大一点说是定义了程序执行的次序。注意,为了获得较好的执行性能,Java内存模型并没有限制执行引擎使用处理器的寄存器或者高速缓存来提升指令执行速度,也没有限制编译器对指令进行重排序。也就是说,在java内存模型中,也会存在缓存一致性问题和指令重排序的问题。
Java内存模型规定所有的变量都是存在主存当中(类似于前面说的物理内存),每个线程都有自己的工作内存(类似于前面的高速缓存)。线程对变量的所有操作都必须在工作内存中进行,而不能直接对主存进行操作。并且每个线程不能访问其他线程的工作内存。
如果两个元素不相同,但是hash函数的值相同,这两个元素就是一个碰撞
因为把任意长度的字符串变成固定长度的字符串,所以存在一个hash对应多个字符串的情况,所以碰撞必然存在
java 内存模型是一种规范
比如规定volatile需要保证可见性,在遇到volatile修饰的变量时,由jdk通过在指令里插入内存屏障来保证他每次都可以读到最新的值
MESI模型是CPU缓存模型
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.