zoukankan      html  css  js  c++  java
  • 03 synchronized

    synchronized

    1、 锁机制的特性

    • 互斥性:在同一时间只允许一个线程持有某个对象锁(原子性)
    • 可见性:必须确保在锁被释放之前,对共享变量所在的修改,对于随后获得该锁的另一个线程是可见的

    2、synchronized的使用

    2.1 锁的分类

    • 对象锁:synchronized(this|object) 修饰非静态方法

      每个对象都会有一个monitor对象,这个对象就是java对象的锁

      类的对象可以有多个,所以每个对象有其独立的对象锁,互不干扰
    • 类锁:synchronized(类.class) 修饰静态方法

      类锁实际上是通过对象锁实现的,即类的class对象锁

      每个类只有一个Class对象,所以每个类只有一个类锁

    2.2 锁的原理(monitor)

    • 代码块加锁是通过monitorenter和monitorExist配合使用实现
    • 方法的加锁通过表示为ACC_SYNCHRONIZED实现

    2.3 java虚拟机对synchronized的优化

    一个对象实例包含:对象头、实例变量、填充数据

    对象头中包含了锁的标志位信息:

    • 当其他线程竞争失败后,不要马上转换锁的级别,而是执行空循环(自旋锁)
    • 锁排除:JIT在编译的时候把不必要的锁去掉
  • 相关阅读:
    AJAX 基础知识
    jQuery知识点总结
    css基础应用总结
    javascript 总结
    找回密码-博客园
    centerOS 7 安装MySql
    java leetcode TreeNode类、ListNode类的实现
    iOS StatusBar状态栏文字颜色更改
    使用Jmeter压力测试工具测试
    安装node.js
  • 原文地址:https://www.cnblogs.com/lifeone/p/11653128.html
Copyright © 2011-2022 走看看