synchronized 关键字可以将对象和方法标记为同步,达到互斥访问的目的
对象锁
锁代码块
Test test = new Test();
synchronized (test) {
//TODO
System.out.println();
}
锁this
synchronized (this) {
//TODO
System.out.println();
}
锁非静态方法
public synchronized void t1() {
//TODO
System.out.println();
}
类锁
类信息存储在方法区中,所有线程共享方法区,所以所有线程共享类锁
锁 Xxx.class
synchronized (Test.class) {
//TODO
System.out.println();
}
锁静态对象
public static Object lock = new Object();
public void t1() {
synchronized (lock) {
//TODO
System.out.println();
}
}
锁静态方法
public static synchronized void t1() {
//TODO
System.out.println();
}