Java에서 어떤 작업이 원자 적으로 간주됩니까?Java에서 어떤 작업이 원자 적으로 간주됩니까?
답변
- 참조 긴 더블
- 모든 과제 휘발성 변수의
- 모든 과제 java.concurrent.Atomic의
- 모든 작업 * 클래스
을 제외하고 기본 유형의 모든 과제 어쩌면 더 많은 것이있을 것입니다. jls을보십시오.
주석에서 언급했듯이 원 자성은 가시성을 의미하지 않습니다. 따라서 다른 스레드가 부분적으로 작성된 int
을 볼 수 없도록 보장되지만 새 값을 결코 볼 수 없습니다.
long과 double에 대한 연산은 일반적인 64 비트 CPU atomic as well에 있지만 보장 할 수는 없습니다. 이 내용은 feature request을 참조하십시오.
Java에서 32 비트 이하의 읽기 및 쓰기는 원자 적이어야합니다.
원자 단위로, 각 동작은 한 단계에서 발생하며 중단 될 수 없음을 의미합니다. 따라서 다중 스레드 응용 프로그램이있는 경우 읽기 및 쓰기 작업은 스레드로부터 안전하므로 동기화 할 필요가 없습니다.
public final void set(long newValue) {
value = newValue;
}
참고 :이 가 AtomicLong.java에서이 방법에 따라, 갈망의 과제는 원자이다을 보일 수있을 것입니다
public class ThreadSafe
{
private int x;
public void setX(int x)
{
this.x = x;
}
}
.. 그 값은 언제나 원래의 값이나 설정 값이 될 것입니다. 대부분의 최신 값은 여전히 "휘발성"또는 "동기화 됨"이 없어 다른 스레드에서 볼 수 없습니다. –
+1에 @MikkoWilkman이 말합니다. 이 코드는 메모리 가시성 측면에서 스레드로부터 안전하지 않기 때문에 사용하면 안됩니다. –
: 예를 들어
, 다음 코드는 스레드 안전 동기화가 없다.
'value'의 선언을보세요. 그것은 '휘발성'이다. – maaartinus
'value'는'volatile'이고'value'는 원자 적으로 지정되지 않습니다. 단순히 "발행"문제를 피할뿐입니다. –
둘 다 수행합니다 ([JLS, 섹션 17.7] 참조) (http://docs.oracle.com/javase/specs/jls/se7/html/jls-17.html#jls-17.7) : volatile long의 쓰기 및 읽기 double 값은 항상 원자 적입니다. – maaartinus
- 1. Java에서 디렉터리를 원자 적으로 다른 디렉터리로 대체하는 방법은 무엇입니까?
- 2. 디렉토리를 원자 적으로 이동
- 3. C에서 포인터를 변경하는 것이 원자 적 동작으로 간주됩니까?
- 4. 원자 애니메이션 - 어떤 기술
- 5. Mac OS에서 원자 적으로 값을 얻으십시오.
- 6. 원자 적으로 파일을 만드는 가장 좋은 방법
- 7. 원자 적으로 파일에 쓰는 것의 차이점은 무엇입니까?
- 8. 원자 적으로 변화하는 복수의 열 MySQL의
- 9. gen_event 관리자에게 원자 적으로 알리고 중지합니다
- 10. 원자 적으로 비교 및 증분하는 방법은 무엇입니까?
- 11. 메소드를 원자 적으로 표시하는 방법이 있습니까?
- 12. 여러 파일을 원자 적으로 잠그는 것
- 13. Django 트랜잭션은 비 db 오퍼레이션을 원자 적으로 만드나요?
- 14. 원자 변수를 사용하여 Java에서 뮤텍스 구현
- 15. JavaScript 라이브러리가 어떤 시점에서 FrameWork로 간주됩니까?
- 16. Java에서 다형 적으로 디스 패칭
- 17. JDBC를 통해 MySQL 문을 원자 적으로 실행하는 좋은 방법이 있습니까?
- 18. linq에서 원자 적으로 업데이트하고 쿼리 할 수 있습니까?
- 19. Java에서 인쇄 - 인쇄 작업이 영원히 중단됩니다.
- 20. Java에서 어떤 작업을 수행합니까?
- 21. SubSonic 3 ActiveRecord를 사용하여 원자 적으로 필드를 증가 시키십시오.
- 22. MATLAB에서 파일 잠금을 원자 적으로 생성하기 (파일 뮤텍스)
- 23. 변수 스왑은 파이썬에서 원자 적으로 보장됩니까? 다음 링크를 참조
- 24. x86 ASM에서 값을 원자 적으로 읽는 방법은 무엇입니까?
- 25. mysql에서 UPDATE를 사용하여 행 또는 리소스를 원자 적으로 클레임하는 방법
- 26. 필드를 원자 적으로 유지하도록 테이블을 구성하는 방법은 무엇입니까?
- 27. 원자 적으로 교환 할 수있는 AtomicReference를 생성 할 수 있습니까?
- 28. Windows : 전체 프로세스를 원자 적으로 일시 중단 하시겠습니까?
- 29. Windows에서 원자 적으로 두 개의 포인터를 어떻게 바꿀 수 있습니까?
- 30. GCCs 원자 내장 명령을 - 프로세서
'volatile'longs와 double에 대한 할당은 원자 적이어야합니다. http://java.sun.com/docs/books/jls/third_edition/html/memory.html#17.7 –
또한, 작업은 원자 단위이므로 특별히 신경 쓰지 않는 한 다중 스레드 응용 프로그램에서 해당 작업의 가시성이 보장되지 않을 수 있습니다 (자세한 내용은 여기 * 설명에 설명이 복잡합니다). – nos
64 비트 jvm, long 및 double assigments 또한 원자입니다. –