클래스 2의 여러 인스턴스 중 하나에서 상태 변경으로 연결되는 작업을 수행하는 경우가 있는데, 이는 멀티 스레드 응용 프로그램이므로이 특정 부분이 코드가 실행되면, 전술 한 2 개의 인스턴스 중 어느 하나에 액세스하려고 시도하는 다른 스레드 중 어느 것도 대기 상태가되지 않는다. 동기화 또는 잠금을 사용하면 단일 인스턴스에서 잠금을 획득하고 2 개의 객체에서 동기화 된 블록을 중첩 할 수 있습니다.Java에서 여러 객체 잠그기
synchronized(obj1){
synchronized(obj2){
}
}
또 다른 잠재적 인 문제는 내부 개체 obj2보다 무료 인 경우에도 경우 외부 객체가 스레드가 기다리고 계속 잠겨 있기 때문에, 경우가있을 수 있다는 것입니다. 이 문제에 대한 최선의 해결책은 무엇입니까?
"2 개의 객체에 동기화 된 블록을 중첩하는 것은 좋은 생각이 아닙니다." 왜 안돼? 어떤 종류의 코드 경로가 있습니까? 결국 데드락을 피하기를 원한다. 그래서'obj2'가 자유 다 할지라도'obj1'이 그렇지 않은지 상관 없다. – Kayaman
'sync (obj2) {sync (obj1) {...}} '와 같은 또 다른 코드가 있다면 문제가 될 것입니다. –
왜 이것을해야합니까? 그들은 너무 독립적으로 잠겨 있습니까? 나는'Lock'을 사용하고 객체에 접근하기 전에 항상 그것을 잠그는 것을 제안 할 것이다. 또한'Lock'을 사용하면 순차적으로 잠금을 획득해야하는 경우에'tryLock'을 수행하여 교착 상태를 방지 할 수 있습니다. –