zoukankan      html  css  js  c++  java
  • java 锁白话

    一、锁

      1、可见性:

        定义:数据对所有线程可见

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

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

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

      2、原子性:

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

      3、隔离区(临界区)

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

        实现:java使用synchronized来实现

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

        悲观锁:其他线程操作时,加锁,悲观的认为锁不会马上释放,阻塞等待唤醒【算了。停在这等吧】

            阻塞态到运行态会很耗时钟,如果预期不会马上唤醒,可以使用悲观锁

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

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

        

  • 相关阅读:
    中国机读目录格式(CNMARC)
    smarty截取中文字符乱码问题?gb2312utf8
    smarty模板截取字符串乱码问题完美解决```````
    marc数据
    smarty精品教程三(高级篇)
    中国机读目录格式(CNMARC)附录
    smarty精品教程二(高级篇)
    QuickSkin简明教程
    smarty精品教程四(高级篇)可下载实例
    maven学习指南
  • 原文地址:https://www.cnblogs.com/hackxiyu/p/9485441.html
Copyright © 2011-2022 走看看