synchronized 代码块间的同步性在使用同步synchronized代码块时需要注意的是,当一个线程访问object 的一个
synchronized(this) 同步代码块时,其他线程对同一个object 中所有其他synchronized(this) 同步代码块的访问将被阻塞,这说明synchronized 使用的“对象监视器”是一个。
看例子:
//code 1
public class ObjectService {
public void showService1() {
synchronized (this) {
System.out.println("这是方法1");
System.out.println("线程开始睡眠,释放锁");
//这里模拟一个非常耗时的业务
System.out.println("线程睡眠结束");
}
}
public void showService2() {
synchronized (this) {
System.out.println("这是方法2");
System.out.println("线程开始睡眠,释放锁");
//这里模拟一个非常耗时的业务
System.out.println("线程睡眠结束");
}
}
}
执行结果:this是代表当前的对象,两个同步代码块指向的是同一个对象