문제

고유 잠금(this)보다 블록을 동기화하기 위해 개인 잠금 개체를 선호하는 경우는 언제입니까?두 가지의 결과를 모두 인용해 주세요.

개인 잠금 객체:-

Object lock =new Object();  
synchronized(lock)
{  }

내장 잠금(this):-

synchronized(this)
{  }
도움이 되었습니까?

해결책

명시적 사용 lock 객체는 다양한 방법으로 다양한 잠금을 동기화하고 불필요한 경합을 방지할 수 있습니다.또한 잠금을 더욱 명확하게 만들고 잠금을 사용하는 블록에 대한 코드를 검색하기 쉽게 할 수 있습니다.

그러나 아마도 당신도 하고 싶지 않을 것입니다!java.util.concurrent에서 적절한 클래스를 찾아 대신 사용하세요.:)

다른 팁

개인 잠금 장치는 일종의 잠금 샤드를 수행하는 경우 유용 할 수 있습니다. 즉, 다른 클라이언트가 여전히 액세스 할 수있는 반면, 다른 부분의 특정 부분 만 잠글 필요가 있습니다.

이 개념을 이해하는 간단한 병렬 중 하나는 데이터베이스의 테이블 잠금입니다. 하나의 테이블을 수정하는 경우 전체 데이터베이스가 아닌 단일 테이블의 잠금을 얻으므로 나머지 테이블은 다른 클라이언트가 수정할 수 있습니다. 유사한 논리를 구현해야하지만 Pojo에서는 필요한만큼의 개인 잠금 장치를 사용합니다.

이 접근법의 단점 중 하나는 수업이 많은 객체로 어수선한 것입니다. 이것은 더 간단한 잠금 전략을 가진보다 세분화 된 클래스 세트에서 리팩터링해야한다는 것을 나타낼 수 있지만 모두 설계 및 구현에 따라 다릅니다.

이들은 모두 본질적인 자물쇠를 사용하고 있습니다. 첫 번째 예는 고유 잠금 장치를 사용하는 것입니다 lock, 두 번째는 내재적 잠금 장치를 사용하는 동안 this. 문제는 this 실제로 당신이 잠그고 싶은 것입니다.

사용할 때 케이스를 고려하십시오 synchronized(this) 방법 중 하나 안에. 이 클래스의 2 개의 객체가 있으며이 개체는 일부 공유 리소스를 참조합니다. 당신이 잠그는 경우 this 그러면 해당 자원에 대한 상호 독점성이 없습니다. 리소스에 액세스 할 수있는 모든 것이 액세스 할 수있는 객체를 잠그어야합니다.

잠그십시오 this 중요한 자원이 클래스 자체의 일부인 경우에만. 그럼에도 불구하고 어떤 경우에는 잠금 객체가 더 좋습니다. 또한 수업에 여러 가지 다른 리소스가 있다면 상호 배타적 일 필요는 없지만 개별적으로 개별적으로 필요합니다. 여러 잠금 객체가 필요합니다.

열쇠는 실제로 방법을 아는 것입니다 동기화 작동하고 코드가 실제로 무엇을하는지 염두에 두십시오.

실제로, 중 하나를 사용하면 아무런 차이가없고, 선택/스타일에 관한 것이며, API 작가는 객체를 잠그게합니다. -동기화 (this) 또는 명시 적 동기화로 모든 객체 메소드에서, 또는 내부 모니터를 사용하면 리소스 공유에 따라 API 사용자가 내부 잠금에 액세스 할 수 없거나 API 사용자에게 객체 내장 잠금을 공유하도록 선택할 수 있습니다.

어느 쪽이든 그러한 선택 중 어느 것도 잘못되지 않았으며, 그러한 자물쇠의 의도에 관한 것입니다.

읽다 실제로 Java 동시성, 그것은 당신을 동시성의 마스터로 만들고 많은 개념을 명확하게 할 것입니다.이 개념은 때때로 정확성보다는 선택과 더 관련이 있습니다.

각 객체에는 하나의 고유 잠금 장치 만 있습니다.

동기화 된 키워드 : 두 개의 다른 스레드에서 동일한 객체에서 두 개의 동기화 된 메소드를 호출하는 경우, 심지어 한 스레드가 방법 1을 실행할 수 있고 다른 스레드는 메소드 2를 실행할 수 있습니다. 물체). 그리고 그에 따르면 한 스레드는 다른 스레드가 끝날 때까지 기다려야합니다.

그러나 여러 자물쇠를 사용하는 경우, 하나의 스레드 만 한 번에 하나씩 메소드에 액세스 할 수 있고 한 스레드 만 한 번에 한 번에 방법 2에 액세스 할 수 있는지 확인합니다. 그러나 해당 메소드 1과 메소드 2에 각각 동시에 하나의 스레드로 액세스 한 다음 작업에 필요한 시간을 줄일 수 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top