zoukankan      html  css  js  c++  java
  • 二十二 synchronized同步方法

    一 Synchronized锁:

      1 synchronized取得的锁都是对象锁,而不是把一段代码或方法加锁。

         synchronized是给该方法的实例对象加锁。如果多个线程访问的是同一个对象

         的synchronized方法,就可以同步。

      2 对象中的非synchronized类型的方法是不需要等待锁的。

      3 不同的synchronized方法之间也是互斥的,因为锁的是对象!

    二 Synchronized锁重入:

      1 synchronized具有锁重入的功能,同一个线程可以多次获得一个对象的锁。也就是说:一个synchronized方法内部调用本类的其他synchronized方法时,是永远             可以得到锁的。

            2 可重入锁也支持在父子继承的情况下

            3  出现异常情况,锁自动释放。当一个线程执行的代码出现异常时,其所有的锁会自动释放。

       4 子类继承父类的同步方法时,如果希望也是同步方法需要加上synchronized关键字。

    三 synchronized同步语句块

      1 控制的粒度更细致,效率更高。

       2 synchronized (this)

       3 当一个线程访问object的一个synchronized(this)同步代码块,其他线程对同一object中所有的其他synchronized(this)同步代码块的访问都将被阻塞,说明synchronized使用的“对象监视器”是一个。

    四 将任意对象作为对象监视器

      多个线程调用同一个对象中的不同名称的synchronzied同步方法或synchronzied(this)同步代码块时,调用的效果就是按顺序执行,也就是同步,阻塞。

      锁非this对象的优点:比如一个类中四个方法,方法1和2需要同步,方法3和4需要同步,这个时候就可以用非this的锁,效率高。

     五 静态同步synchronized方法与synchronized(class)代码块     

      关键字synchronized还可以用在static静态方法上,这样写,是对当前加锁。

      类锁可以对类的所有对象实例起作用。 

     

      

  • 相关阅读:
    [转]C#里 泛型Where和 new()的使用
    测试
    C#中的static、readonly与const的比较
    将字符串格式化变为两位
    在VS中对字段进行包装
    安装mysql的心得
    关于mysql数据库的乱码问题
    timestamp的两个属性:CURRENT_TIMESTAMP 和ON UPDATE CURRENT_TIMESTAMP
    解决向数据库mysql插入double数据小数点不显示问题
    JDBOOK
  • 原文地址:https://www.cnblogs.com/liufei1983/p/9873519.html
Copyright © 2011-2022 走看看