java高并发之synchronized
java高并发之synchronized
synchronized可以保证代码块或者方法在运行时,同一时刻只有一个方法可以进入临界区域,同时也可以保证共享变量的内存可见性
synchronized可以使用在三种情况:
1. 普通同步方法,锁是当前实例对象
2. 静态同步方法,锁是当前类的class对象
3. 同步方法块,锁是括号里面的对象
package com.tianmaying.crawler.impl; public class SynchronizedTest { public synchronized void test1(){} }
public void test2(){
synchronized (this){}
}
public static synchronized void test3(){}
使用javap -c SynchronizedTest反编译项目
可以看出来:
同步方法,同步静态方法:都是标注了方法是synchronized,并没有什么特殊标注,但是据文章《http://www.cnblogs.com/javaminer/p/3889023.html》,表示该方法的access_flags字段的synchronized标志位置为1
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
两个概念:java对象头、monitor