• synchronized关键字


    一. synchronized的三种应用方式
    1.作用于实例方法,当前实例加锁,进入同步代码前要获得当前实例的锁;(一例一锁,两例两锁)
    一个对象一把锁说的就是这个,当线程获取了该对象的锁后,其他线程无法获取该对象的锁,当然就访问不了该对象的synchronized方法,可以访问该对象的其他未被synchronized修饰的方法。
    2.作用于静态方法,当前类加锁,进去同步代码前要获得当前类对象的锁;(一类一锁,多例一锁)
    如果线程A调用一个实例的非static synchronized方法,而线程B调用这个实例所属类的静态 synchronized方法,不会发生互斥现象,因为占用的锁是当前类的class对象的锁和当前实例对象锁。

    3.作用于代码块,这需要指定加锁的对象,对所给的指定对象加锁,进入同步代码前要获得指定对象的锁。
    Synchronized($this){
    }

    Synchronized(xxx.class){
    }

    当两个synchronized方法同为普通方法或者静态方法时,不能同时调用;否则可以调用。这是因为,当调用synchronized普通方法时,锁住的是当前的this,而调用synchronized锁住的是当前类的字节码;两个方法锁住对象不同,所以可以同时调用。

  • 相关阅读:
    编译原理 实例
    lex yacc flex bison
    图解tensorflow 源码分析
    PostgreSQL 179个场景 案例集锦
    github view source
    Java 微服务实践
    Linux kernel AIO
    Lex与Yacc学习
    OpenResty 通过 Lua 扩展 NGINX 实现的可伸缩的 Web 平台
    nginx Architecture
  • 原文地址:https://www.cnblogs.com/shijianchuzhenzhi/p/12904888.html
Copyright © 2020-2023  润新知