synchronized与volatile关键字
synchronized有两种作用域:
1.作用域为方法:这种作用域下,锁住的对象为this,也就是当前对象;如果方法是静态的,锁住的是当前的Class类对象。
public synchronized void synchronizeMethod() {
// do sth
}
2.作用域为代码块:锁住的对象为synchronized之后指定的对象,下例中即为resource。
public static void main() {
synchronized(resource) {
// do sth
}
}
在真正执行的时候,两者都是会去获取底层monitor锁(监视器锁)执行。