Java并发基础之理论篇
很多朋友反馈说,对于没有Java并发基础就了解Java并发工具包,表示一脸茫然。那么从这一期开始就从一些并发的基础内容开始聊起。
基础概念
进程
计算机运行过程中,资源分配与管理的基本单元,每个进程都有独享的逻辑内存空间。
线程
可以理解为轻量级的进程,是运行程序中的最小单元,同一个进程中的线程共享该进程中内存资源。在同一时刻可以多个线程处于启动状态,但对于单核心的单CPU计算机来说,在同一时刻只有一个线程被执行。
协程
程序中可以有多个协程,协程与线程的概念类似。有共享的资源,也有私有的资源。不太一样的地方是协程需要显示调用,并且协程没有线程可以使用多CPU的能力。
并发与并行
并发与并行总有人分不太清楚,这里需要强调一下。并发与并行其实是两个概念,
- 并发是同时进入可执行状态的多个运行单元,但只有若干个运行单元(空闲的CPU核心)可以执行,其余进入阻塞队列等待核心资源。
- 并行也是同时进入可执行状态的多个运行单元,有若干个运行单元同时执行,这些执行的单元之间叫做并行。
也就是说一个是强调属性,另一个是强调的关系。
竞态条件
竞态条件(Race Condition),这个指的是系统执行的顺序出现问题,导致无法得到预期的结果。
PS:对于竞态条件的几个前提
- 多个运行单元
- 使用了共享资源
同步机制
同步机制是用来解决竞态条件问题的,通过对共享资源的监视器加锁来控制多个单元争抢运行资源导致顺序不确定的问题。
总结
计算机执行单元需要清楚之间的区别,对于共享资源的限制。
竞态条件其实就是发生了资源的竞争,这个理解容易发生误解。
同步机制了解一下大体的概念,知道是控制资源抢占间接控制执行顺序的机制。
这一期主要聊的是理论概念的东西,所以还是内容比较干的一期,希望先让朋友们对基础理论有一个了解,在进行之后的讨论更容易一些。之后会有比较详细的分享对这些概念进行解读,还有相应的实例方便理解。