JavaAPIAndroid知识Android开发经验谈

synchronized总结

2017-06-25  本文已影响71人  一只好奇的茂

synchronized是Java中的关键字,是一种同步锁。

修饰一个代码块或方法

其作用的范围是大括号{}括起来的代码或者整个方法,调用者可获得可获取对象级锁
修饰一个代码块

public synchronized void method() {
    synchronized (this) {
        /***  代码块  ***/
    }
}

修饰一个方法

public synchronized void method()
{
   // todo
}

以下说明中,代码块同等于方法。

修饰一个对象

其作用范围是整个对象,调用者可获得可获取对象级锁,当一个线程访问obj对象时,其他试图访问obj对象的线程将会阻塞,直到该线程访问obj对象结束。

public void function(SomeObject obj)
{
      //obj 锁定的对象
      synchronized(obj)
      {
         // todo
      }
}

修饰一个静态的方法

其作用的范围是整个静态方法,调用者可获得可获取类级锁,即作用的对象是这个类的所有对象;

public synchronized static void method() {
   // todo
}

修饰一个类

其作用的范围是synchronized后面括号括起来的部分,调用者可获得可获取类级锁

class ClassName {
   public void method() {
      synchronized(ClassName.class) {
         // todo
      }
   }
}

这里就使用同步机制获取互斥锁的情况,进行几点说明:

参考

Java中Synchronized的用法
synchronized
Java 多线程:synchronized 关键字用法(修饰类,方法,静态方法,代码块)

上一篇下一篇

猜你喜欢

热点阅读