was successfully added to your cart.

자바 쓰레드 동기화 예제

Por 02/08/2019 Sem categoria Sem comentários

동기화된 블록을 사용할 때 내부적으로 Java는 모니터 잠금 또는 내장 잠금이라고도 하는 모니터를 사용하여 동기화를 제공합니다. 이러한 모니터는 개체에 바인딩되므로 동일한 개체의 모든 동기화된 블록은 동시에 하나의 스레드만 실행하도록 할 수 있습니다. 동기화된 메서드는 공유 리소스에 대한 개체를 잠그는 데 사용됩니다. 위의 예제에서는 ThreadedSend 클래스의 run() 메서드 내에서 Sender 개체를 동기화 하도록 선택했습니다. 또는 전체 send() 블록을 동기화된 것으로 정의할 수 있으며 동일한 결과를 생성할 수 있습니다. 그런 다음 ThreadedSend 클래스의 run() 메서드 내에서 메시지 개체를 동기화할 필요가 없습니다. 이 동기화는 모니터라는 개념으로 Java에서 구현됩니다. 지정된 시간에 하나의 스레드만 모니터를 소유할 수 있습니다. 스레드가 잠금을 획득하면 모니터에 들어간 것으로 전해드립니다. 잠긴 모니터에 들어가려는 다른 모든 스레드는 첫 번째 스레드가 모니터를 종료할 때까지 일시 중단됩니다. 편집 : 동기화 블록 `동기화 (이)`와 `service.awaitTermination(…) ` 동기화 된 방법 @Anonymous 모든 시간 동안 작동 하는 것 같다, 자바에서 동기화 교착 상태 와 같은 문제를 피하기 위해 공유 리소스의 제어 된 액세스를 허용 하는 것을 의미 합니다. java는 하이 엔드 멀티 코어 프로세서의 이점을 누릴 수있는 고성능 동시 프로그램을 작성할 수있는 기능을 제공하는 다중 스레드 언어입니다. 동기화된 키워드와 휘발성 키워드를 사용하여 java에서 동기화를 수행할 수 있습니다.

이 자습서를 읽으면 자바에서 동기화 된 블록 및 동기화 된 방법을 사용하는 예제를 볼 수 있습니다. 스레드는 주로 필드에 대한 액세스를 공유하여 통신하며 개체 참조 필드는 참조합니다. 이러한 형태의 통신은 매우 효율적이지만 스레드 간섭 및 메모리 일관성 오류라는 두 가지 종류의 오류를 가능하게 합니다. 이러한 오류를 방지하는 데 필요한 도구는 동기화입니다. incrementSync()를 동시에 사용하면 원하는 결과 수가 10000입니다. 더 이상 경합 조건이 발생하지 않으며 코드 실행이 모든 경우 결과가 안정적입니다: Java는 동기화된 블록을 사용하여 스레드를 만들고 작업을 동기화하는 방법을 제공합니다. Java에서 동기화된 블록은 동기화된 키워드로 표시됩니다. Java에서 동기화된 블록은 일부 개체에서 동기화됩니다. 동일한 개체에서 동기화된 모든 동기화된 블록은 한 번에 하나의 스레드만 실행되도록 할 수 있습니다. 동기화된 블록을 입력하려는 다른 모든 스레드는 동기화된 블록 내부의 스레드가 블록을 종료할 때까지 차단됩니다.

자바 동기화에 대한 가장 유익한 기사, 자바 동기화에 대해 배울 것이 너무 많다는 것을 결코 알지 못했습니다. 동기화에서 잘 알려지지 않은 몇 가지 지점에 블록을 동기화하기 위해 거의 모든 양식 동기화 메서드를 다루었습니다. Java 및 동기화에 더 중점을 두지만 모든 주제에 대한 이러한 종류의 기사는 매우 유용합니다. “Java에서 동기화된 키워드의 중요 점” #19 `Java에서 동기화된 블록에서 최종이 아닌 필드에서 동기화하지 마십시오` 예제에서 “Java에서 동기화된 키워드의 중요 지점” 섹션에서는 기본적으로 String 클래스 개체가 최종이 아닙니다. 인터뷰 중 하나에서, 나는 자바 동기화에서 몇 가지 질문을받았다, 당신이 여기에 대답 할 수 있다면 그것은 좋은 것입니다 :당신은 자바에서 로컬 변수 또는 비 최종 변수에 동기화 할 수 있습니까? 그렇게 한다면 어떤 문제에 직면하게 될 것인가? 임계 섹션을 잠글 때 개체 잠금이 비공개여야 하는 이유는 무엇입니까? 첫 번째 질문에 대한 나의 대답은 `예`였다. Java 동기화를 사용하면 로컬 변수 또는 최종 필드가 아닌 필드를 사용하여 동기화 된 블록을 잠글 수 있지만 위험 부분에 대답 할 수 없습니다. 두 번째 질문의 경우 Object 가 비공개로 고정하거나 보호되면 어떻게 될지 혼란스러워했습니다. 그러나 동기화는 둘 이상의 스레드가 동일한 리소스에 동시에 액세스하려고 시도하고 Java 런타임이 하나 이상의 스레드를 더 느리게 실행하거나 실행을 일시 중단하는 경우 발생하는 스레드 경합을 유발할 수 있습니다.

기아와 라이브록은 스레드 경합의 한 형태입니다.