我对锁和同步有疑问。
我有一个锁定对象1的方法,以及锁定对象2的其他方法:
private void a(){
synchronized(obj1){
System.out.println("Object 1 being used");
}
System.out.println("Object 1 finished");
}
private void b(){
synchronized(obj2){
System.out.println("Object 2 being used");
}
System.out.println("Object 2 finished");
}
我还有第三种方法:
private void c(){
for(int i=0;i<=0;i++){
a();
b();
Thread.sleep(2000);
}
}
我希望在方法c
运行时对两个对象1和2保持锁定,在c
完成后,两个锁都可以释放。我怎样才能做到这一点?我尝试将它们放入for
循环,但方法a
和b
只是开始和结束。
答案 0 :(得分:1)
让c方法获取嵌套块中的两个锁:
synchronized (obj1) {
synchronized (obj2) {
// c method logic here
}
}
内在锁是可重入的,所以方法a和b已经获得它们并不重要。
如果您使用多个方法执行此操作,请确保它们以相同的顺序获取锁定,以避免死锁。