2012-09-11 3 views
-3

java.util.concurrent.atomic 패키지는 동기화를 달성하는 또 다른 대안이라고 말하자. 변수가 있고 다른 10 개의 스레드가 증가하면 그 때 문맥에서 원자의 역할은 무엇인지 말해 보자. 동기화 ..!원자의 정수 대 syncronization

+0

'AtomicInteger'는 모든 스레드에 대한 원 자성과 가시성을 보장합니다. 메모리 장벽 역할을하는 변수에 대한 모든 액세스에 대해'synchronized '를 사용하는 것보다 낮은 대기 시간입니다. 둘 다 간단한 할당 및 액세스보다 복잡한 원자 연산을 지원합니다. incrementing ('volatile int'와는 달리). – oldrinb

+0

@oldrinb 가시성은 어디서 오는가? –

+0

@MattBall [java.util.concurrent.atomic'의 스펙 참조] (http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/atomic/package-summary.html) ... "''get '은'volatile'변수를 읽는 것의 메모리 효과가 있습니다 ...''set''은 volatile 변수를 쓰는 것의 메모리 효과를 가지고 있습니다." – oldrinb

답변

2

증가시킬 단일 정수만있는 경우 예 - AtomicInteger을 사용하면 동기화하지 않고도 쉽고 효율적이며 견고하게 달성 할 수 있습니다.

당신보다 더 많은 일을해야하는 경우 - 예를 들어, 당신은 실제로 두 개 이상의 변수, 그 중이 하나의 단위로 업데이트 할 수있는 쌍을 업데이트해야하는 경우에, 당신이 원하는 것 동기화를 사용합니다.