2016-10-25 5 views
-3

volatile Double은 스레드의 스레드 가시성을 갖고 있습니까? 동일한 의 판독 휘발성 변수에 임의의 기록이 후속와 관계-전에 일어나는 확립 때문에 휘발성 변수 사용'volatile Double'의 스레드 간 가시성

메모리 일관성 오류의 위험을 줄여 다음 Java Tutorials at Oracle 가입일

가 다음 인 변하기 쉬운. 즉, 휘발성 변수의 변경 사항은 항상 다른 스레드에서 볼 수 있음을 의미합니다. 또한 스레드가 휘발성 변수를 읽을 때 휘발성 변수에 최신 변경 뿐만 아니라 변경 사항을 초래 한 코드의 부작용도 감지한다는 것을 의미합니다.

Double이 특수한 종류의 개체인지 특수하지 않은 개체인지에 따라 달라질 수 있습니다.

+0

downvote에 대한 이유는, 무엇을, 제발 ? – H2ONaCl

+0

'Double'과 'double'(또는 다른 유형)간에 어떤 차이점을 만들려고하는지 불분명합니다. _special_이 무슨 뜻이야? –

+0

기존 Double에 대한 개체 참조 변경 또는 기존 개체에 대한 변경입니다. 객체에 대한 변경 사항 인 경우 참조의 크로스 스레드 가시성은 아무런 이점이 없습니다. 권리? – H2ONaCl

답변

0
volatile Double bigD = new Double(1.0); 
bigD = 2.0; 

는 jtahlborn이 지적한 불변 클래스입니다. 원본 개체 인스턴스는 변경되지 않으므로 변경되지 않습니다. 로의 변경은 필연적으로 참조 변경입니다. 이 변경은 volatile 선언으로 인한 스레드 간 가시성의 이점을 얻습니다.

A list of Java immutables.

Examples of Java immutables.

-1

예, 한 스레드에서 변수 volatile에 대한 변경 사항은 변수가 기본 유형인지 참조 유형인지에 관계없이 이후에 스레드가 해당 변수에 액세스 할 때 표시됩니다. 그러나 이 아니므로 스레드 동기화 문제가 발생하지 않습니다. 두 스레드가 동시에 변수를 변경하려고 시도하지 않아야합니다.

+0

그러나 기존 Double에 대한 할당이 내용에 대한 변경 인 경우 참조가 변경되지 않은 경우 스레드간에 변경 사항이 표시되지 않습니다. 권리? – H2ONaCl

+0

스레드가 증가 된 속도를 위해 Double의 캐시 된 복사본에 액세스하고있을 수 있습니다. 스레드가 Double을 필요로 할 때, 현재 값은 항상 메모리에서 직접 검색되지는 않습니다. 이중 값의 캐시 된 사본에서 가져온 것일 수 있습니다. –

+1

두 스레드가 동시에 변수를 변경하려고하지 않는다는 것을 보장해야합니까? '휘발성'은 변수 수정의 원 자성을 보장합니다. –