Synchronized关键字

2018-11-24  本文已影响0人  ShawZ

参考:多线程知识梳理- synchronized 三部曲之基本使用

一、八种场景,四种背景

1.Class对象:

//静态方法,使用的是Class类锁
 synchronized public static void staticMethod() {}

//静态方法代码块1,使用的是Class类锁
public static void staticBlock1() {
    synchronized (SynchronizedObject.class) {}
}

//普通方法代码块1,使用的是Class类锁
public void block1() {
    synchronized (SynchronizedObject.class) {}
}

2.调用方法的对象

//普通方法,使用的是调用该方法的对象锁
    synchronized public void method() {}
//普通方法代码块4,使用的是调用该方法的对象锁
    public void block4() {
        synchronized (this) {}
    }

3.静态对象

private static final byte[] mStaticLockByte = new byte[1];

//静态方法代码块2,使用的是内部静态变量锁
    public static void staticBlock2() {
        synchronized (mStaticLockByte) {} 
    }
//普通方法代码块3,使用的是mStaticLockByte的变量锁
    public void block3() {
        synchronized (mStaticLockByte) {} 
    }

4.非静态对象

 private final byte[] mLockByte = new byte[1];
//普通方法代码块2,使用的是mLockByte的变量锁
    public void block2() {
        synchronized (mLockByte) {} //变量需要声明为final
    }

如果使用场景属于上面的同一个分类当中,那么才有可能产生线程阻塞在synchronized关键字的情况

上一篇 下一篇

猜你喜欢

热点阅读