zoukankan      html  css  js  c++  java
  • synchronized关键字

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

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

    Synchronized(xxx.class){
    }

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

  • 相关阅读:
    Binary search tree
    搜索二叉树
    windows最基本命令行
    sublime package
    二叉树的层次遍历和其深度
    二叉树后序遍历
    PopupWindow的使用
    android之ViewPager的使用
    android部分开发摘要
    android4.0以后要求网络请求必须发生在子线程中
  • 原文地址:https://www.cnblogs.com/shijianchuzhenzhi/p/12904888.html
Copyright © 2011-2022 走看看