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虚拟机并发编程