JUC(java.util.current)、线程安全与并发的综述
本文先入一个门,方便学习并发
- 线程安全的实现
- 线程,线程池,JVM内部的实现
- CAS、Sync(以及区别)
- 平时遇到的并发问题
什么是并发(Concurrent),什么是并行(Parallels)?
这个概率比较混乱,在书上与StackOverFlow上答案各有各的说法。以下是一本专业书籍的引用
并发程序是指可以被同时发起执行的程序。而并行程序则是被设计成可以在并行的硬件上执行的并发程序。换句话说,并发程序代表了所有可以实现真正的或者可能的并发行为的程序。它是一个比较宽泛的概念。这其中包含了并行程序。并行程序是并发程序中的一种。 -《Go并发编程实战》
总的来说,就是并行需要硬件支持,并发同时可以用硬件或者时间片模拟。因此并行是并发的子类。
详细可以参考parallel-vs-concurrent
线程安全的实现
线程安全与并发似乎天天都遇到,
1. 无状态函数
无状态函数是指无副作用的函数,也就是函数式编程中所谓的“纯函数”,比如map,filter,它们在LISP语言中叫做Lambda表达式。因为不涉及共享变量,所以总是线程安全的。
2. Final不可变
3. 锁
3.1. CAS锁
3.2. 互斥锁
书籍推荐
- 七周七并发模型
- Java虚拟机并发编程