您的位置:首页 > 编程语言 > Java开发

Java 中的类锁和对象锁

2016-07-22 10:57 537 查看
类锁:在方法上加上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选项中的两个方法一个是对象锁,一个是类锁,所以可以同时访问
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: