Java 中的类锁和对象锁

类锁:在方法上加上static synchronized的锁,或者synchronized(xxx.class)的锁。

对象锁:就是锁是Java对象。

举例:

public class LockDemo {
	private Object object = new Object();
	public synchronized void method_01(){}
	public void method_02(){
		synchronized (this.object) {}
	}
	public void method_03(){
		synchronized (this) {}
	}
	public void method_04(){
		synchronized (LockDemo.class) {}
	}
	public static synchronized void method_05(){}
}
从上面可以得出:method_01和method_04是类锁,其它三个是对象锁。

做一道题:

有一个类,如下:

public class SynchronizedTest
{    public synchronized void method1(){}
    public synchronized void method2(){}
    public static synchronized void method3(){}
    public static synchronized void method4(){}
}
那么,有SynchronizedTest的两个实例a和b,对于一下的几个选项有哪些能被一个以上的线程同时访问呢? 
A. a.method1() vs. a.method2() 
B. a.method1() vs. b.method1() 
C. a.method3() vs. b.method4() 
D. a.method3() vs. b.method3() 
E. a.method1() vs. a.method3() 
答案是什么呢?BE

method1和method2都是对象锁,method3和method4都是类锁,A选项中两个方法使用的是一个对象锁,所以不能同时访问;B选项中两个方法使用的是两个对象的对象锁,所以可以同时访问;C、D选项的两个方法都是使用的一个类锁,所以不能同时访问;E选项中的两个方法一个是对象锁,一个是类锁,所以可以同时访问


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值