-
synchornized
- 修饰实例方法
作用于当前实例加锁,进入同步代码前要获得当前实例的锁,锁住的是对象的实例(this);
public sychornized void func()
- 修饰静态方法
作用于当前类对象加锁,进入同步代码前要获得当前类对象的锁锁住的是Class实例(类对象),又因为Class的相关数据存储在永久带PermGen(jdk1.8则是metaspace),永久带是全局共享的,因此静态方法锁相当于类的一个全局锁,会锁所有调用该方法的线程;
public static synchornized void func()
- 修饰代码块
指定加锁对象,对给定对象加锁,进入同步代码库前要获得给定对象的锁。锁住的是所有以该对象为锁的代码块。
synchornized(对象){ //临界区 }
note: 类对象和实例对象不一样
- 修饰实例方法
- synchornized底层原理分析
网友评论