并发编程-关于 CAS 的几个问题
CAS 相关基础知识
CAS的全称是Compare And Swap ,即比较交换。CAS 中一般会设计到3个参数:
- 内存值 V
- 旧的预期值A
- 要修改的新值B
当且仅当预期值 A 和内存值 V 相同时,将内存值V修改为 B,否则什么都不做。
这里关于 CPU 指令对于 CAS 的支持不深入研究,有兴趣的可以自行了解。
CAS的全称是Compare And Swap ,即比较交换。CAS 中一般会设计到3个参数:
当且仅当预期值 A 和内存值 V 相同时,将内存值V修改为 B,否则什么都不做。
这里关于 CPU 指令对于 CAS 的支持不深入研究,有兴趣的可以自行了解。
ThreadPoolExecutor算是JUC中最常用的类之一了。ThreadPoolExecutor,顾名思义,thread-pool-executor,硬翻译就是“线程-池-执行者”;java中,通过ThreadPoolExecutor可以很容易的创建一个线程池。但是我们为什么要使用线程池?呢?它能够带来什么样的优势呢?它又是怎么实现的呢?OK,带着这几个问题,我们来学习一下JAVA中的线程池技术。
多线程和并发这两个东西真的是向往已久,总是有一种神秘的感觉,想去探索一波,又担心水平不够无法驾驭。想以读书笔记的方式来写,但是又觉得缺少自己的一些思考;但是在没有足够并发编程经验的情况下又没法去写出很深刻的东西,毕竟没有踩过坑。所以在阅读spring源码的同时,也想抽点时间来看一看JUC的东西,关于这块只能说是记录自己学习JUC的一个过程,尝试用一些具体的代码demo来加深理解。所以就把本系列写成《【 初识】-JUC·XXXX》,用来让自己打开并发编程的大门。
看着看着就想着怎么能写一个死锁呢,打开 eclipse,突然感觉无从下手;之前都是一直在解决阻塞、死锁这些问题,现在反过来去写一个死锁感觉有点莫名奇妙。。。
ok, 写一个死锁就要有一种场景,并且满足死锁的条件。
在 java 中,所有的变量(实例字段,静态字段,构成数组的元素,不包括局部变量和方法参数)都存储在主内存中,内个线程都有自己的工作内存,线程的工作内存保存被线程使用到的变量的主内存副本拷贝。线程对变量的所有操作都必须在工作内存中进行,为不能直接读写主内存的变量。不同线程之间也不恩能够直接访问对方工作内存中的变量,线程间比变量值的传递通过主内存来完成。
本文主要是了解并发编程中的涉及一些基础概念,如:临界区、互斥量、CAS、重排序以及 Java 语言中的一些关键字。