多线程并发 — 你应该了解的线程锁

2020-07-21  本文已影响0人  闲庭

回顾操作系统的发展历史:手工操作(串行执行程序) —> 批处理系统(自动地、成批地处理一个或多个用户的作业) —> 多道程序设计技术(允许多个程序同时进入内存并交替在CPU中运行) —> 分时系统(采用时间片轮转的方式同时为几个、几十个甚至几百个用户服务) —> 实时系统 —> ...,从操作系统的发展可以看出来,从单任务到多任务,从多道处理到分时处理,计算机的资源利用率和并发性越来越高了。

为了提高处理器资源的利用率提高系统的吞吐率,基本上都采用多线程和并发的运作方式。
并发(Concurrency):是指在在同一时间间隔(即某个时间段内),多任务交替处理的能力(理想情况下的同时)。CPU把可执行时间均匀地分成若干份,每个进程执行一段时间后,记录当前的工作状态,释放相关的执行资源并进入等待状态,让其他线程抢占CPU资源。
并行(Parallelism):指在同一时刻,有多条指令在多个处理器上同时执行,也就是真正意义上的同时。

image.png

1. 多线程开发为什么要用锁?

锁-是为了解决多线程并发操作引起的脏读、数据不一致的问题。

疑问:
那么为什么多线程并发操作会引起脏读、数据不一致的问题?

  1. Java 内存模型规定了所有的变量都存储在主内存中,每条线程有自己的工作内存。
  2. 线程的工作内存中保存了该线程中用到的变量的主内存副本拷贝,线程对变量的所有操作都必须在工作内存中进行,而不是直接读写主内存。
  3. 线程访问一个变量,首先将变量从主内存拷贝到工作内存,对变量的写操作,不会马上同步到主内存。
  4. 不同的线程之间也无法直接访问对方工作内存中的变量,线程间变量的传递均需要自己的工作内存和主存之间进行数据同步进行。

2. 线程锁的分类

上一篇下一篇

猜你喜欢

热点阅读