가 명확하게 고쳐 동기화 블록 사용 개체 암시 적 잠금수없는 이유는 내가 직접 액세스 (및 잠금)
좀 더 명시 적 잠금과 동기화 된 블록의 사용을 혼합 할 수 있도록하고 싶습니다적절한 때에 직접 잠금 및 해제 메소드 호출을 통해. 따라서 sychtronized (myObject)를 사용할 때 신택스 설탕을 허용하면서 myObject.lock을 호출 할 수 있습니다. & myObject.unlock 동기화 된 블록이 필요한만큼 수행 할 수 없을 때 dierctly합니다. 끝난.
모든 단일 객체에는 동기화 된 블록에서 사용되는 임대인 잠금이 암시 적으로 내장되어 있습니다. 실제로 잠금 잠금은 동기화 된 블록에 들어갈 때마다 개체 내부 재진입 잠금에 대해 호출되며 동기화 블록을 벗어날 때 동일한 재진입 잠금에서 잠금이 호출됩니다. 나는이 inplicit 재진입 잠금을 수동으로 잠 그거나 잠금 해제 할 수있는 능력을 허용하기는 쉽지 않은 것 같습니다. 따라서 동기화 된 블록을 혼합하고 잠금을 해제 할 수 있습니다.
그러나 내가 아는 한이를 수행 할 방법이 없습니다. 그리고 동기화 된 블록이 작동하는 방식 때문에 나는 명시 적으로 잠금을 해제하는 것과 그들을 섞는 편리한 방법이 있다고 믿지 않습니다. 이것은 마치 편리하고 잠금 API/메소드를 추가하기 위해 Object API를 사용하여 쉽게 추가 된 것처럼 보입니다.
내가 가진 질문은 왜 존재하지 않는 것입니까? 나는 이유가 있다고 확신하지만 그것이 무엇인지는 모른다. 캡슐화 문제 일 수 있다고 생각했습니다. 동기화를 원하지 않는 동일한 이유 (this). 그러나 이미 sycnhronized (myObject)를 호출하고 있다면 defObject를 통해 myObject에 대해 아는 사람이라면 누구나 마찬가지로 동기화 할 수 있으며 어리석은 짓을하게되면 교착 상태가 발생할 수 있습니다. 캡슐화 문제는 sychtronized 블록을 사용하거나 수동으로 객체를 잠그지 않고 동기화 한 객체에 누가 액세스 할 수 있는지에 대한 것입니다. 적어도 나는 그것을 본다. 그래서 수동으로 객체를 잠그지 못하게하는 다른 이점이 있습니까?
내 현재 삭제 된 답변 및 그 뒤를 따르는 답변을 방지하기 위해 동일한 모니터에서 동기화하려고한다고하지만 ** ** 원하지는 않습니다. 'synchronize' 문을 사용합니다. 어떤 종류의 모니터 객체를 가져 와서 그 객체에'lock' 메소드를 호출하고, 다른 로직을 수행하고,'release'를 호출하기를 원한다. 동기화 된 방법과 동기화 된 블록에 대한 질문이 아니라 명시 적 "잠금"및 "해제" "호출을 통해 동일한 모니터 사용에 관한 질문입니다. –
이제 그는 그가 무엇을 알고 싶어하는지 모르겠다. 마지막 단락은 고급 객체 지향 디자인 주제로 이해된다. 첫 번째 단락은 초보자가 스레드 안전성에 대해 질문한다. 중간 단락에서 그는 sycronized 블록에 대해 taks, 그는 syncronied 방법을 의미하거나, 이것에 syncronizing 수 있습니다. 조금은 혼란 스럽네요. – AlexWien
예 TJ, 나는 네가 한 말을 묻고있다. 미안해. 문구가 잘 안되면, 내가 원하는 것을 선물하는 법을 생각할 수 없다. – dsollen