java 锁白话

1、锁

  一、可见性:

    定义:数据对全部线程可见java

    缘由:cpu操做数据时会把数据读取到内存中去,能够理解为值作了备份,可是备份数据和原始数据在后续操做中不必定一致缓存

    实现:java使用volite关键字来实现,是最先的缓存一致性解决方案安全

    原理:借助与cpu缓存一致的解决性方案,操做系统抽象其为lock操做spa

  二、原子性:

    定义:操做拆分为多个步骤后,在执行过程当中中间变量被其它修改,致使操做和预期的不一致操作系统

  三、隔离区(临界区)

    定义:要实现多个线程对变量操做的安全性,就要实现操做的串行化线程

    实现:java使用synchronized来实现对象

    原理:对象在内存的头部有一个标识内存

    悲观锁:其余线程操做时,加锁,悲观的认为锁不会立刻释放,阻塞等待唤醒【算了。停在这等吧】it

        阻塞态到运行态会很耗时钟,若是预期不会立刻唤醒,可使用悲观锁变量

    乐观锁:其余线程操做时,加锁,乐观的认为锁会立刻释放,一直在轮询标志,查看锁释放状态【一直在问锁释放了没?】

        一直运行于运行态,短时唤醒能够考虑,预期锁释放时间较长会更耗时钟

相关文章
相关标签/搜索