目录
一、概念
多个线程访问同一个资源时,需要对该资源上锁。即同时只允许一个线程访问该资源。任何线程要执行synchronized里的代码,都必须先拿到锁。synchronized底层实现,JVM并没有规定必须应该如何实现,Hotspot在对象头上(64位)拿出2位来记录该对象是不是被锁定,markword,即锁定的是某个对象。
每一个class文件加载到内存后,都会生成Class类的一个对象和加载到内存的代码对应,所以锁静态方法时,锁的是Class类的某个对象(比如T.class)。
synchronized锁的都是对象。
1、同步方法和非同步方法可以同时执行
public class T {
public synchronized void m1() {
System.out.println(Thread.currentThread().getName() + " m1 start...");
try {
Thread.sleep(5000);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(Thread.currentThread().getName() + " m1 end...");
}
public void m2() {
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(Thread.currentThread().getName() + " m2 end...");
}
public static void main(String[] args)