정수를 인수로 받아들이고 콘솔에 인쇄하는 방법을 만듭니다. 이 메소드는 다중 스레드에 의해 액세스됩니다. 2 개 이상의 thread가 같은 값을 가지는 메소드를 호출하면 (자), 1 개의 thread만이 다른 thread가 대기하는 값을 인쇄 할 수있게 할 필요가 있습니다. 값이 다른 경우 모든 스레드가 값을 인쇄 할 수 있어야합니다. 인턴은 여기서 도움이 될 거라는 걸 알지만 자바 인턴은 128보다 작은 값까지 발생합니다. 그 후 동일한 값을 갖는 두 정수가 다른 대상입니다 ... 할 수 있습니까? 조건에 동기화를위한 모든 조항 ??조건에 따른 Java 동시성
답변
같은 값을 인쇄에서 여러 스레드를 방지하지만, 그들이 다른 사람
이 문제를 방지하는 가장 간단한 방법은 인쇄 허용에 대한 요구 사항은 이미 인쇄 된 정수의 집합을하는 것입니다. 당신이 자물쇠를 사용하는 오버 헤드를 인쇄하기 때문에 사소한 것입니다.
는Set<Integer> printed = Collections.synchronizedSet(new HashSet<Integer>());
// when printing
if (printed.add(num)) // will one be true the first time for each number
System.out.println("num: " + num);
는 는
은 수행 할 수 있습니다
?
콘솔에 대한 인쇄는 이미 동기화되어 있으며 작업 내용에 관계없이 모든 스레드가 사용자의 작업과 관계없이 인쇄 작업을 동기화합니다. 잠금을 더 추가해도 변경되지 않습니다.
System.out을 구현하고 당신은 단순히 여기에 발신자에서하여 synchronized
을 무시하도록 결정할 수 없습니다
public void println(String x) {
synchronized (this) {
print(x);
newLine();
}
}
을 잘못의 PrintStream에서.
조건에 동기화하기위한 모든 조항 ??
가장 간단한 방법은 다른 잠금 또는 로컬 스레드를 잠그는 것입니다. uncontented 오브젝트를 잠그는 것은 매우 빠릅니다.
synchronized(shared ? sharedObject : Thread.currentThread()) {
}
기타 이것은 매우 이상하거나 혼란스러운 일입니다. 나는 심각하게 설계 변경을 고려할 것이므로 필요하지 않습니다. 일반적인 멀티 스레드 코드를 작성하는 것은 쓰기/이해하기에 충분히 어렵습니다.
나는이 질문이 그가 묻고있는 것에 대해 꽤 대답 할 것이라고 생각하지 않는다. (질문은 꽤 모호하지만, 나는 무엇이 질문 당하고 있는지 확신 할 수 없다.) -이 답변은 다중 스레드가 * 동일한 * 값을 인쇄하지 못하도록하는 요구 사항을 어떻게 해결합니까? 이상한 묘사에도 불구하고, 그것은 질문의 중요하고 중요한 부분처럼 들립니다. – JVMATL
@JVMATL 동시에 여러 개의 스레드를 인쇄 할 수 없습니다. System.out이 이미 동기화되었으므로 쉽게 동기화 할 수 없으며 원할 수도 없습니다. –
System.out은 동기화되어 있지만 사용자의 설명에 따르면 System.out에서 인터리빙 출력을 막기 위해 동기화하는 것이 실제로 그의 질문의 요지입니다. 그는 다른 값으로 호출되는 경우 '동일한 값'으로 메소드를 호출하면이 메소드를 호출하는 방법이 다른지를 묻는 것처럼 보입니다. 그가 관심을 갖는 것이 인쇄물의 인터리빙을 방해하는 것이라면 왜 그 값이 같은지 또는 다른지를 언급 할 것입니까? (그리고 아니오, 그가 무엇을하고 싶은지 알아낼 수 없다) – JVMATL
- 1. 조건에 따른 가치
- 2. 조건에 따른 그룹화
- 3. 조건에 따른 대리인 정렬
- 4. 조건에 따른 통화 포맷
- 5. 조건에 따른 PostgreSQL 결과
- 6. 성별 조건에 따른 카운트 (*)
- 7. 조건에 따른 의존성 주입
- 8. 조건에 따른 Guice 주입
- 9. 조건에 따른 TSQL SELECT
- 10. 조건에 따른 바인딩
- 11. Gridview 조건에 따른 동적 서식
- 12. 일부 조건에 따른 문자열의 유효성
- 13. 조건에 따른 파이썬 모듈 사용
- 14. 조건에 따른 패키지 종속성 [debian]
- 15. 팬더 : 조건에 따른 이동 합계
- 16. SQL 삭제 조건에 따른 쿼리
- 17. 조건에 따른 유효성 검사 문제
- 18. 그룹 별 : 조건에 따른 변수 값의 합
- 19. 조건에 따른 Crystal 보고서의 페이지 나누기
- 20. 가능한 제약 조건에 따른 배열 조합
- 21. 조건에 따른 Neo4j 카운트 하위 노드
- 22. 조건에 따른 레코드 업데이트 Ruby on Rails
- 23. 관용 스칼라 : 조건에 따른 매핑 옵션
- 24. MATLAB 사용자 지정 조건에 따른 정렬
- 25. 조건에 따른 인터럽트 낙타 경로 흐름
- 26. 방법에 따른 Java 변수
- 27. Java 환경에 따른 컴파일
- 28. Java 동시성/네트워킹 접근
- 29. Java 동시성 설계
- 30. Java EE 애플리케이션의 동시성
코드는 어디에 있습니까? –
'.. 다른 스레드는 무엇까지 기다려야합니까? – JVMATL
* 조건에 따라 동기화하지 않습니다. - 개체를 동기화 한 다음 조건에 맞는 지 여부에 따라 개체의 값에 따라 동기화 된 블록 내에서 논리를 수행합니다. 그러나이 모든 질문은 매우 불명확합니다. 예를 들어, 한 스레드가 '4'로 전화를 걸면 1 분 후에 '4'로 다른 전화가 오면 어떻게 될까요? 어떤 일이 일어나야 하는지를 이해할 때까지 (그리고 설명 할 수있을 때까지), 당신을 도울 수 없습니다. 각 값은 한 번만 인쇄 할 수 있습니까? 그렇다면 호출 스레드는 어떻게됩니까? 그들은 영원히 차단합니까? – JVMATL