Java의 동시 프로그래밍에서 참조되는 모니터는 무엇입니까?
"모든 개체가 모니터와 연결되어 있음"을 읽으면 무슨 의미입니까?
특별한 물건입니까?
Java의 동시 프로그래밍에서 참조되는 모니터는 무엇입니까?
"모든 개체가 모니터와 연결되어 있음"을 읽으면 무슨 의미입니까?
특별한 물건입니까?
답변:
모니터는 객체에 대한 동시 액세스를 제어하는 메커니즘입니다.
이를 통해 다음을 수행 할 수 있습니다.
실 1 :
public void a()
{
synchronized(someObject) {
// do something (1)
}
}
실 2 :
public void b()
{
synchronized(someObject) {
// do something else (2)
}
}
스레드 1과 2가 동시에 모니터링 된 (동기화 된) 섹션에 액세스하는 것을 방지합니다. 하나는 시작되고 모니터는 다른 하나는 첫 번째 영역이 끝나기 전에 해당 영역에 액세스하지 못하게합니다.
특별한 물건이 아닙니다. 클래스 계층 구조 루트에 배치 된 동기화 메커니즘 java.lang.Object
입니다.
이 또한 wait
과 notify
도 다른 스레드간에 통신 객체의 모니터를 사용하는 방법.
Class
정적 메소드 의 해당 오브젝트 인 오브젝트에 대해서만 존재 합니다. 이미 동기화 된 method1 ()이 있고 method2 ()가 동기화 된 것으로 선언 한 경우 새 모니터가 작성되지 않으며 실제로 동일한 오브젝트에서 두 메소드를 호출하면 동일한 모니터를 잠그려고 시도합니다. 이것은 종종 새로운 이민자를 잡습니다.
모니터는 잠금 및 대기 세트를 모두 갖는 엔티티입니다 . Java에서는 모든 Object
것이 모니터 역할을 할 수 있습니다.
Java에서 모니터가 작동하는 방법에 대한 자세한 설명은 Java 동시 프로그래밍 의 모니터 역학 섹션을 읽는 것이 좋습니다 (앞의 링크는 Google 도서에 미리보기를 표시하고 해당 섹션을 읽을 수 있음).
Wakes up all threads that are waiting on this object's monitor.
notifyall ()에 대해 말할 때 , 내가 얻는 것은 객체가 모든 스레드가 잠금을 기다리는 것을 유지하고 (내부 엔티티 / 객체의 도움으로) 내부 엔티티 / 객체를 모니터라고합니다.
Java 언어 및 런타임 시스템은 모니터 사용을 통한 스레드 동기화를 지원합니다.
모니터는 특정 데이터 항목 (조건 변수)과 연관되며 해당 데이터에 대한 잠금 기능을합니다. 스레드가 일부 데이터 항목에 대한 모니터를 보유하면 다른 스레드가 잠기 며 데이터를 검사하거나 수정할 수 없습니다.
http://java.sun.com/docs/books/jvms/second_edition/html/Concepts.doc.html#33308
ㅏ 번에 하나씩 개체에 대한 액세스를 제어 메커니즘
모니터는 스레드가 상호 배제와 특정 조건이 충족 될 때까지 대기 (차단) 할 수있는 동기화 구성입니다.
모니터에는 다른 스레드의 상태가 충족되었음을 알리는 메커니즘도 있습니다. 잠금 및 대기 세트를 모두 보유하는 엔티티입니다. Java에서 모든 Object는 모니터 역할을 할 수 있습니다.
JVM (Java Virtual Machine)에서 모든 오브젝트 및 클래스는 논리적으로 모니터와 연관됩니다. 모니터의 상호 배제 기능을 구현하기 위해 잠금 (뮤텍스라고도 함)이 각 오브젝트 및 클래스와 연관됩니다. 이것을 운영 체제 용어로 세마포라고하며 뮤텍스는 이진 세마포입니다.
http://journals.ecs.soton.ac.uk/java/tutorial/java/threads/monitors.html
모니터는 오브젝트 또는 데이터 멤버와 연관되며, 이는 데이터 멤버 또는 오브젝트가 입력 될 때 획득되며 동기화 블록 (임계 섹션)이고 종료시 해제됩니다.