Java 并发笔记
2017-11-07 19:24
148 查看
减少上下文切换(上下文切换:CPU在多个线程间切换执行)途径:
无锁并发编程:将数据的ID按照hash算法取模分段,不用线程处理不同段的数据;
CAS算法 ::Compare and Swap 原理是CPU的cas指令, 通过缓存锁,保证操作的原子性,
例如 i++, 局限是只能保持一个变量的操作原子性
缓存锁与总线锁相比,优势在于,总线锁将CPU和内存的通道锁住,导致其他其他处理器无法处理内存数据,而所谓“缓存锁定”,就是如果缓存在处理器缓存行中内存区域在LOCK操作期间被锁定,当它执行锁操作回写内存时,处理器不在总线上声言LOCK#信号,而是修改内部的内存地址,并允许它的缓存一致性机制来保证操作的原子性,因为缓存一致性机制会阻止同时修改被两个以上处理器缓存的内存区域数据,当其他处理器回写已被锁定的缓存行的数据时会起缓存行无效,
在i++操作中,当CPU1修改缓存行中的i时使用缓存锁定,那么CPU2就不能同时缓存了i的缓存行。
使用最少线程
协程。单线程中实现多任务的调度,并维持多个任务的切换
Java的锁
由低到高: 无锁,偏向锁,轻量级锁,重量级锁
占有锁对象的:通过CAS操作将ThreadId ,放入 对象的对象头的 Mark Word的位置
偏向锁:如果出现锁竞争,先暂停有锁线程,检查这个线程是否活跃,
volatile变量的内存读写:
线程A写一个volatile变量,实质上是给接下来要读这个变量的线程发了消息
线程B读一个volatile变量,实质上是接受了之前某线程发出的消息
线程A写一个volatile变量,线程B又读了,实质上就是线程A通过主内存向线程B发送了一个消息
并发工具类
等待多线程完成 :CountDownLatch
最简单的方法是 Thread 的join方法, 用于让当前线程等待join线程结束。
而使用CountDwoLatch,构造方法需要传一个int值 ,表示需等待N个点, 提供await()方法,阻塞等待,
如果不阻塞,可用await(long time,TimeUnit unit);
无锁并发编程:将数据的ID按照hash算法取模分段,不用线程处理不同段的数据;
CAS算法 ::Compare and Swap 原理是CPU的cas指令, 通过缓存锁,保证操作的原子性,
例如 i++, 局限是只能保持一个变量的操作原子性
缓存锁与总线锁相比,优势在于,总线锁将CPU和内存的通道锁住,导致其他其他处理器无法处理内存数据,而所谓“缓存锁定”,就是如果缓存在处理器缓存行中内存区域在LOCK操作期间被锁定,当它执行锁操作回写内存时,处理器不在总线上声言LOCK#信号,而是修改内部的内存地址,并允许它的缓存一致性机制来保证操作的原子性,因为缓存一致性机制会阻止同时修改被两个以上处理器缓存的内存区域数据,当其他处理器回写已被锁定的缓存行的数据时会起缓存行无效,
在i++操作中,当CPU1修改缓存行中的i时使用缓存锁定,那么CPU2就不能同时缓存了i的缓存行。
使用最少线程
协程。单线程中实现多任务的调度,并维持多个任务的切换
Java的锁
由低到高: 无锁,偏向锁,轻量级锁,重量级锁
占有锁对象的:通过CAS操作将ThreadId ,放入 对象的对象头的 Mark Word的位置
偏向锁:如果出现锁竞争,先暂停有锁线程,检查这个线程是否活跃,
volatile变量的内存读写:
线程A写一个volatile变量,实质上是给接下来要读这个变量的线程发了消息
线程B读一个volatile变量,实质上是接受了之前某线程发出的消息
线程A写一个volatile变量,线程B又读了,实质上就是线程A通过主内存向线程B发送了一个消息
并发工具类
等待多线程完成 :CountDownLatch
最简单的方法是 Thread 的join方法, 用于让当前线程等待join线程结束。
而使用CountDwoLatch,构造方法需要传一个int值 ,表示需等待N个点, 提供await()方法,阻塞等待,
如果不阻塞,可用await(long time,TimeUnit unit);
相关文章推荐
- Java 并发学习笔记
- Java 并发编程学习笔记 理解CLH队列锁算法
- Java并发编程笔记
- JAVA并发编程学习笔记之ReentrantLock
- 多线程/并发笔记:Java并发编程之this逃逸问题
- [jjzhu学java之多线程笔记]java并发机制的底层实现原理
- (38)21.3.8 线程本地存储---Java编程思想之并发笔记
- [转]JAVA并发编程学习笔记之Unsafe类
- 【JAVA高并发秒杀API之DAO层】课程笔记
- Java并发编程笔记1-竞争条件&初识原子类&可重入锁
- Java并发笔记(一)
- Java高并发程序设计笔记(八)之Future设计模式
- JAVA并发编程学习笔记之CLH队列锁
- Thinking in Java学习笔记 第二十一章:并发
- Java学习笔记—多线程(java.util.concurrent并发包概括,转载)
- java并发包学习笔记(一)
- Java并发编程的艺术笔记
- Java并发编程实践笔记之—不变性(Immutability)
- Java学习笔记—多线程(并发工具类)