zoukankan      html  css  js  c++  java
  • synchronized关键字使用场景分析

    1. a,b两个线程同时访问不同的同步方法

    2. 新增一个普通方法,然后一个线程访问同步方法,一个线程访问普通方法

    3. 两个线程分别用两个对象去调用资源类

    4.两个线程访问两个不同的   静态   同步方法

     5. 一个静态同步方法,一个普通同步方法,同一个资源对象去访问

     6. 同步代码块

     最终结论:

    1. 所有的普通同步方法用的都是同一把锁——实例对象本身,就是new出来的具体实例对象本身,本类this,也就是说如果一个实例对象的普通同步方法获取锁后,该实例对象的其他普通同步方法必须等待获取锁的方法释放锁后才能获取锁(同步代码块一样)。
    2. 所有的静态同步方法用的也是同一把锁——类对象本身,就是我们说过的唯一模板Class
    3. 具体实例对象this和唯一模板Class,这两把锁是两个不同的对象,所以静态同步方法与普通同步方法之间是不会有竞态条件的 但是一旦一个静态同步方法获取锁后,其他的静态同步方法都必须等待该方法释放锁后才能获取锁。

    4. 能锁区块,就不要锁整个方法体;能用对象锁,就不要用类锁。

  • 相关阅读:
    jvm 更多链接
    JVM 内存初学 (堆(heap)、栈(stack)和方法区(method) )
    python 排序
    python 第K个语法符号
    python conf.ini 文件的使用
    python 表示数字
    window 下安装redis
    python redis相关操作
    python 矩阵乘法
    python 查找两个字符串a,b中的最长公共子串
  • 原文地址:https://www.cnblogs.com/yerikm/p/15302590.html
Copyright © 2011-2022 走看看