멀티 스레딩하는 응용 프로그램이 있습니다. 변수가 여러 스레드에 의해 공유 될 때 기존 코드가 volatile로 표시된다는 것을 알았습니다. 변수를 사용할 때 메서드에서 synchronized를 사용하는 것이 아니라 변수를 volatile로 정의하면 어떤 이점이 있습니까?Java 가변 변수, 멀티 스레딩
0
A
답변
6
의미 :
- 이 변수의 값은 스레드 로컬로 캐시되지 않습니다 : 모든 읽기 및 직선에 "메인 메모리"갈 것이다 쓴다;
- 변수에 대한 액세스는 동기화 된 블록으로 묶여있는 것처럼 작동합니다 (자체적으로 동기화 됨). 즉
, 동기화 및 휘발성의 주요 차이점은 다음과 같습니다
- 원시적 변수가 (당신이 동기화와 원시적에 동기화 할 수있는 반면) 휘발성 선언 할 수있다;
- 휘발성 변수에 대한 액세스는 차단할 가능성이 없습니다. 단순한 읽기 또는 쓰기 만 수행하므로 동기화 된 블록과 달리 잠금을 유지하지 않습니다.
- 휘발성 변수에 액세스하면 잠금이 유지되지 않으므로, "업데이트를 잃어 버릴 준비가되어 있지 않으면"원자 연산으로 읽기 - 업데이트 - 쓰기를 원하는 경우에는 적합하지 않습니다.
- 개체 참조 인 휘발성 변수는 null 일 수 있습니다 (실제 개체가 아닌 참조에서 효과적으로 동기화하기 때문에).
자세한 내용은 다음과 같습니다 http://javamex.com/tutorials/synchronization_volatile.shtml
0
는 here에서 촬영 : (당신이 동기화와 원시적에 동기화 할 수있는 반면)
원시적 변수가 휘발성 선언 할 수있다;
휘발성 변수에 액세스 결코 차단할 수있는 가능성이 없다 : 동기화 된 블록과는 달리, 우리는 이제까지 간단한 읽기를하고 또는 쓰기있는 정도 우리 것 어떤 잠금에 결코 보류; 휘발성 변수에 접근하는 것은 결코 잠금을 보유하지 않기 때문에 우리가 읽을 업데이트 쓰기를 하기 위해 원자 작업으로 (우리가 에 준비하지 않는 한 "업데이 트를 그리워") 원하는 위치
, 그것은 경우에 적합하지 않습니다 ;
개체 참조 인 휘발성 변수는 이 null 일 수 있습니다. 실제 개체가 아닌 을 효과적으로 동기화하기 때문입니다. 휘발성 자바 변수를 선언
1
1
동기화 사용하는 것보다 훨씬 간단하고 빠르게 당신에게 도움이 될 수 있습니다.
더 간단하기 때문에 사용이 제한적이지만 volatile이 필요한 경우 왜 동기화를 사용해야합니까? ;)
0
간단히 말해 하나 이상의 변수 (상태)가 스레드간에 공유되는 경우에만 volatile
을 사용해야합니다. synchronized
, less intuitive
도 저렴합니다. 휘발성 상태를 유지하는 하나 이상의 변수가 문제가됩니다.
관련 문제
- 1. 간단한 멀티 스레딩 java
- 2. 멀티 스레딩 Java 정규식
- 3. java 멀티 스레딩
- 4. C++ volatile 멀티 스레딩 변수
- 5. Java * 멀티 스레딩 with MySQL
- 6. Java 및 데이터베이스의 멀티 스레딩
- 7. Java 멀티 스레딩 메서드 액세스
- 8. Java - 멀티 스레딩 및 동기화
- 9. 기본 Java 멀티 스레딩 질문
- 10. Java 가변 함수 매개 변수
- 11. 멀티 스레딩, lambdas 및 로컬 변수
- 12. 멀티 스레딩
- 13. Java : 멀티 스레딩 및 UDP 소켓 프로그래밍
- 14. JVM, Java, 멀티 스레딩, 객체 생성
- 15. LWJGL (JAVA)의 OpenGL 멀티 스레딩
- 16. 웹 서비스의 Java/Scala 멀티 스레딩 문제
- 17. 소나 - 러너 멀티 스레딩?
- 18. iPhone "멀티 스레딩"질문
- 19. 스프링 및 멀티 스레딩
- 20. GWT : 멀티 스레딩
- 21. 자바 멀티 스레딩 문제
- 22. 멀티 스레딩 및 멀티 태스킹
- 23. 멀티 스레딩 멀티 볼 게임
- 24. iPhone : 멀티 태스킹, 멀티 스레딩?
- 25. 멀티 스레딩 성능
- 26. Appengine을 사용한 멀티 스레딩
- 27. Perl에서 멀티 스레딩
- 28. 멀티 스레딩 문제
- 29. IDS의 멀티 스레딩
- 30. 멀티 스레딩 프로그램에 대한 쿼리
내 머리 꼭대기에서 - 어떻게 작동하는지 이해하지 못한다면 만지지 마세요 –
수십 개의 웹 페이지가 설명되어 있습니다. –
웹에서 "Java 메모리 모델" – Miquel