java并发编程过程中,常用到同步关键字synchronized,现在分析下synchronized在编程过程中的几种用途。
在方法体上
public synchronized void method1() {
}
一次同时只能有一个线程能调用方法,其他线程只能等待。
在方法内部1
Integer mutex = 10;
public void method1() {
synchronized (mutex) {
System.out.println(mutex);
}
}
public void method2() {
synchronized (mutex) {
mutex +=1;
}
}
在调用method1时,会阻塞mehtod2
在方法内部2
public void method() {
synchronized (this) {
System.out.println("method2");
}
}
通过当前对象锁
在方法内部3
public void method() {
synchronized (XX.class) {
System.out.println("method2");
}
}
精度加锁
Object obj1 = new Object();
Object obj2 = new Object();
public void method1() {
synchronized (obj1) {
}
}
public void method2() {
synchronized (obj2) {
}
}
可以根据自己需要,加锁更精确,提高效率