exchangex.exchange()가 스레드를 차단 상태로 전환합니까? java docs에서는 교환기에 도달 한 첫 번째 스레드가 두 번째 스레드를 '대기'하고 있다고 언급합니다.Exhanger.exchange 블록이 있습니까?
0
A
답변
0
귀하의 답변은 귀하가 직접 언급 한 Javadoc에 있습니다. 분명히 메서드는 두 번째 스레드가 메서드를 호출 할 때까지 첫 번째 스레드를 차단합니다.
2
교환기가 스레드를 차단하지 않으면 교환기에 도달하는 첫 번째 스레드가 대기하게됩니다.
1
전화 교환을 변경 첫 번째 스레드가 WAITING
간단한 코드에 상태가 어떻게되는지입니다 :
public class ExchangerTest {
public static void main(String[] args) throws InterruptedException {
final Exchanger<Long> ex = new Exchanger<Long>();
Thread t1 = new Thread(new Runnable() {
@Override
public void run() {
System.out.println("thread 1");
try {
ex.exchange(10L);
} catch (InterruptedException e) {
Thread.currentThread().interrupt();
}
}
});
t1.start();
Thread.sleep(500); //give t1 time to start
System.out.println(t1.getState());
}
}
2
명확하게하기 위해, 여섯 개 스레드 상태가 있습니다 : NEW RUNNABLE, BLOCKED는, 대기 중, 대기 중 및 대기 중입니다.
시나리오에서 첫 번째 스레드는 RUNNABLE에서 WAITING으로 이동하고 두 번째 스레드가 도착할 때까지 대기합니다.
BLOCKED 상태는 뮤텍스 획득을 기다리는 동안 스레드가 차단 된 경우 사용됩니다. 이 특별한 경우, 첫 번째 쓰레드는 뮤텍스를 먼저 얻는 것이므로, 그 시점에서 BLOCKED 상태가되지 않습니다. 그러나 두 번째 스레드가 도착하면 잠시 BLOCKED 상태가되거나, 알림을 수신 한 후 후에 첫 번째 스레드가 일시적으로 BLOCKED 상태 이 될 수 있습니다.
관련 문제
- 1. 파이썬의 httplib.HTTPConnection 블록이 있습니까?
- 2. 왜이 javascript 블록이 Node.js에 있습니까?
- 3. 디스플레이가있는 입력 : 블록이 블록이 아닌 이유는 무엇입니까?
- 4. jquery UI 차단기에 여러 블록이 있습니까?
- 5. UIScrollView 블록이 루프를 실행합니까?
- 6. 인라인 블록이 상대적인 위치
- 7. Ruby에서 블록이 Smalltalk에 비해
- 8. to_gmaps4rails 블록이 작동하지 않습니까?
- 9. XSL의 스크립트 블록이 렌더링되지 않습니다.
- 10. pmap에 거대한 anon 블록이 있습니다.
- 11. GCD 블록이 업데이트되지 않음 NSCollectionView
- 12. 블록이 아닌 특수 템플릿 C++
- 13. 해제 된 힙 블록이 수정되었습니다.
- 14. Objective-C 블록이 자동으로 릴리즈됩니까?
- 15. iPhone OS 3.1.3에서 블록이 지원됩니까?
- 16. 코드 블록이 대리자를 완전히 대체합니까?
- 17. pthread_mutex_destroy 블록이 무한 루프에 있습니다
- 18. 새우 테이블 : 블록이 실행되지 않습니다.
- 19. try 블록이 비싼 이유는 무엇입니까?
- 20. UIView 애니메이션 블록이 작동하지 않습니다.
- 21. 블록이 생성되었는지 테스트하는 방법은 무엇입니까?
- 22. 누군가가 블록이 제대로 작동하지 않는 이유를 알려주실 수 있습니까?
- 23. 두 개 이상의 객체에 대해 자바 동기화 된 블록이 있습니까?
- 24. 블록이 전달되지 않을 때 'yield'를 방지하는 더 좋은 방법이 있습니까?
- 25. 다른 사이트를 긁어 낼 검색 엔진을위한 빌딩 블록이 있습니까?
- 26. 블록이 클로저에서 유지할 개체 유형은 무엇입니까?
- 27. 다음 두 코드 블록이 논리적으로 동일합니까?
- 28. 레일은 find case에서 블록이 실행되는 find_or_create_by?
- 29. 시작 블록이 조건문의 성능에 영향을 줍니까?
- 30. boost와 함께 memcpy의 소스와 대상 블록이 겹침