Synchronized的作用:
1.原子性:只有一个线程执行这段代码
2.可见性:变量的修改能够及时可见
3.有序性:解决重排序问题
synchronized的基本使用举例:
1.锁对象
public class Tom {
private Object obj;
public Tom(Object object){
this.obj=object;
}
public void addTom(){
synchronized (obj){//锁对象
System.out.println("这里是同步代码");
}
}
}
2.锁this对象
//锁this对象
public synchronized void doDrive(int num){
System.out.println("开车:"+num);
}
3.锁当前类对象
public synchronized static void doSing(String num){
System.out.println("同步静态方法:"+num);
}
原理粗理:
64位
查看class markword,JOL工具 查看对象结构:
<dependency>
<groupId>org.openjdk.jol</groupId>
<artifactId>jol-core</artifactId>
<version>0.9</version>
</dependency>