배열을 휘발성으로 만들려면 어떻게해야합니까? 왜냐하면 내가 알기 론 배열이 휘발성이되게하는 것이 안전하지 않기 때문입니까?Java 휘발성 배열?
답변
배열을 volatile로 선언해도 해당 필드에 일시적으로 액세스 할 수는 없습니다. 당신은 참조 자체를 휘발성이 아니라 요소라고 선언하고 있습니다.
은 즉 당신은 요소, 휘발성 요소하지 세트의 휘발성 세트를 선언하고 있습니다. 여기 해결책은 정수를 사용하려는 경우 AtomicIntegerArray를 사용하는 것입니다. 또 다른 방법 (그러나 좀 추한)는 필드를 편집 배열에 대한 참조 때마다 다시 작성하는 것입니다
당신이 할 그 (내가 ... 말했다 못생긴)
arr = arr;
로 AtomicLongArray, AtomicIntegerArray, AtomicReferenceArray (java.util.concurrent.atomic)입니다.
편집 : 배열은 자바 객체. 해당 객체에 대한 참조를 휘발성으로 만들면 배열에 대한 참조를 다른 스레드로 볼 수있게됩니다. 그러나 배열 값 자체에는 해당되지 않습니다. 자바 메모리 모델의 더 나은 unterstanding 얻기
는 실제로 원자 * 배열하지 않고 주위에 얻을 수있는 가능성이있다. 휘발성의 일이-전에 관계를 사용하여 읽기 및 일반 쓰기가 가능하게한다 : 스레드 A는 일부 비 휘발성 물건과 스레드 B는 휘발성 재료의 변화를 볼 수 보장, 후 휘발성 변수 를 기록
경우 뿐만 아니라 스레드 B가 휘발성 변수를 먼저 읽어야합니다. 또한 참조 : 배열 Happens-before relationships with volatile fields and synchronized blocks in Java - and their impact on non-volatile variables?
, 이것이 의미 : 당신이 배열에 기록 후 가 일부 휘발성 상태 변수에 쓰기 (쓰기 실제로 휘발성 상태 변수를 변경해야합니다!) 어레이에서 읽을 때 휘발성 상태 변수를 먼저 읽은 다음 배열에 액세스하십시오. 휘발성 읽기는 이전에 발생한 모든 다른 쓰기도 볼 수있게해야합니다.
OLD : arr=arr
실제로 도움이되지 것 자체 기준을 작성.
당신은 배열 arr
필드 arr[i]
아닌 값의 주소를 작성합니다. 따라서 여전히 arr[i]
에 대한 휘발성 속성은 없지만 저장소 주소는 arr
입니다.
제레미 맨슨의 이전에 언급 한 블로그 게시물은 자세하게 설명 : http://jeremymanson.blogspot.com/2009/06/volatile-arrays-in-java.html
그의 가장 좋은 방법은 원자 * 배열, 일반적인 유형, 즉의 AtomicReferenceArray를 (또한 기본 유형에 대한 특별한 형태의 존재가) 사용하는 것입니다. 특히 이것이 더 많은 속성을 필요로 할 때 특히 효율적이라고 상상할 수 없습니다 (원자 성 >> 휘발성).
대안은 컨테이너가 휘발성 포인터 필드를 사용하는 점으로 구분 된 구조 일 수 있습니다. 또한 그 효율적인 ...
- 1. 휘발성 배열 ++
- 2. C에서 휘발성
- 3. 휘발성 변수
- 4. 휘발성 키워드
- 5. 자바 동시성에 대한 휘발성
- 6. 는 다음 싱글 가정 휘발성 클래스 보증 휘발성 클래스 변수
- 7. 사용하지 않는 휘발성 변수
- 8. 휘발성 구조 의미
- 9. 휘발성 익스트림 프로그래밍 팀
- 10. 연동 및 휘발성
- 11. 자바 휘발성 변수 질문
- 12. 휘발성 데이터 쿼리 최적화
- 13. 휘발성 EquivalenceClass는 더 sortref
- 14. java 배열 스레드 안전
- 15. Java generics 및 배열
- 16. Java 2D 배열 문제
- 17. Java : 배열 및 벡터
- 18. JAVA - 바이트 배열
- 19. Java 소켓으로 배열 보내기
- 20. MongoDB Java 드라이버 배열
- 21. 다차원 배열 조작 - Java
- 22. Java 정렬 병렬 배열
- 23. Java 배열 및 ArrayList
- 24. Java 메서드에서 배열 반환
- 25. 조합 배열 Java
- 26. ArrayList Java 배열
- 27. Java 배열 비교
- 28. 형식이없는 Java 출력 배열
- 29. Java 배열 작업
- 30. Java XSLT Extensions가있는 배열
http : //jeremymanson.blogspot.com/2009/06/volatile-arrays-in-java.html –