public void method(Type1 inst1, Type2 inst2) {
synchronized(inst1) {
synchronized(inst2) {
//do something now
}
}
}
, 그것은 INST1에 잠금을 획득하고 그 로크를 해제 INST1없이 INST2에 로크를 획득한다. 나는이 두 객체가 다른 스레드에 의해 잠겨지지 않는다고 가정한다.
이 경우처럼 스레드가 두 객체에서 동시에 잠금을 획득 할 수 있습니까? I 일단 스레드있어서 진입이 코드 부분에서 이해할 수
- 한 번에 하나의 객체에 대한 잠금을 획득 할 수 있으며 현재 오브젝트에 대한 잠금이 해제 된 경우에만 다른 잠금을 소유 할 수 스레드, 어떻게 이 코드 조각이 아니라 유효하거나 할 수있는 경우이며, 그것은 내가 어딘가에서 본 유효한 코드일까요?
- Type1과 Type2가 같은 경우 어떻게됩니까?
- 메서드의 매개 변수 형식이 아닌 클래스 에있는 것으로 간주하여 메서드를 동기화하면 어떻게됩니까?
이론적으로 스레드가 보유 할 수있는 잠금 수에는 제한이 없습니다.'synchronized '를 사용하여 얻은 잠금은 내재적으로 재진입이므로 동일한 객체를 참조하는'inst1' 및'inst2'에는 아무런 문제가 없습니다. 나는 이것이 숙제의 일종이라고 생각한다. 생각해 보려고하는 것은 데드 록입니다. 스레드 1이이 메소드를 호출하여 'objA'와 'objB'를 전달하면 스레드 2는 'objB'와 'objA'를 동시에 호출합니다. –
교착 상태를 설명하는 데 일반적으로 사용되는 코드입니다. 동의하다. 하지만 스레드가 한 번에 하나의 객체 만 잠글 수 있으며 해제하지 않고 다른 객체에 대한 잠금을 획득 할 수 없다는 것을 기억하는 한 일부 텍스트를 읽었습니다. 그게 내 의심이야! – xploreraj
각 스레드가 한 번에 하나의 잠금 만 보유 할 수 있으면 교착 상태가 발생하지 않습니다. 읽은 내용을 잘못 이해했거나 읽은 내용이 잘못되었습니다. 누군가가 블로그 나 신문에 썼기 때문에 심지어 책은 진실을 주장하지 않습니다. –