자바 병발 중의 원자 성과 가시 성 실례 상세 설명
병발 은 사실 결합 을 푸 는 전략 으로 우리 가 무엇 을 하 는 지(목표)와 언제 하 는 지(시기)를 분리 하 는 데 도움 을 준다.이렇게 하면 응용 프로그램의 스루풋(더 많은 CPU 스케줄 링 시간 획득)과 구 조 를 뚜렷하게 개선 할 수 있다.자바 웹 개발 을 한 사람 은 자바 웹 의 Servlet 프로그램 이 Servlet 용기 의 지원 하에 단일 인 스 턴 스 다 중 스 레 드 작업 모드 를 사용 하여 Servlet 용기 가 병발 문 제 를 처리 한 것 을 잘 알 고 있 습 니 다.
원자 성
원 자 는 세계 에서 가장 작은 단위 로 불가 분 성 을 가지 고 있다.예 를 들 어 a=0;(a.long 과 double 형식 이 아 닌)이 조작 은 분리 할 수 없습니다.그러면 우 리 는 이 조작 을 할 때 원자 조작 이 라 고 말 합 니 다.예 를 들 어 a++;이 조작 은 실제 a=a+1 입 니 다.분할 이 가능 하기 때문에 그 는 원자 조작 이 아니다.비원 자 조작 은 모두 라인 안전 문제 가 존재 하기 때문에 동기 화 기술(sychronized)을 사용 하여 그것 을 원자 조작 으로 만들어 야 한다.하나의 조작 은 원자 조작 이다.그러면 우 리 는 그것 이 원자 성 을 가지 고 있다 고 부른다.자바 의 concurrent 패키지 아래 원자 류 를 제공 합 니 다.우 리 는 API 를 읽 어서 이러한 원자 류 의 용법 을 알 수 있 습 니 다.예 를 들 어 AtomicInteger,AtomicLong,AtomicReference 등 이다.
가시 성
가시 성 이란 라인 간 의 가시 성 을 가리 키 며,한 라인 이 수 정 된 상 태 는 다른 라인 에 대해 볼 수 있다.스 레 드 수정 결과 입 니 다.다른 스 레 드 는 곧 볼 수 있 습 니 다.예 를 들 어 volatile 로 장 식 된 변 수 는 가시 성 을 가진다.volatile 수식 변 수 는 스 레 드 내부 캐 시 와 정렬 을 허용 하지 않 습 니 다.즉,메모 리 를 직접 수정 하 는 것 입 니 다.그래서 다른 스 레 드 는 볼 수 있 습 니 다.그러나 여기 서 주의해 야 할 문 제 는 volatile 이 그 에 게 수 정 된 내용 만 가시 성 을 가지 게 할 수 있 을 뿐 원자 성 을 가지 고 있다 는 것 을 보장 할 수 없다 는 것 이다.예 를 들 어 volatile int a=0;그 다음 에 a++동작 이 있 습 니 다.이 변수 a 는 가시 성 을 가지 지만 a++는 여전히 비원 자 조작 이 고 이 조작 에 도 라인 안전 문제 가 존재 한다.
그들 사이 의 관계
원자 성 은 하나의 조작 이 분할 가능 한 지 를 말 하 는 것 이다.가시 성 은 조작 결과 의 다른 라인 이 보 이 는 지 여부 다.그 러 고 보 니 그들 은 사실 아무런 관계 가 없다.
실례
package com.chu.test.thread;
/**
*
* @author Administrator
*
*volatile 。 。volatile , 。
*
*/
public class Test {
volatile int a = 1;
volatile boolean ready;
public class PrintA extends Thread{
@Override
public void run() {
while(!ready){
Thread.yield();
}
System.out.println(a);
}
}
public static void main(String[] args) throws InterruptedException {
Test t = new Test();
t.new PrintA().start();
// volatile , 。 , 。
t.a = 48; // , 。 volatile 。
t.ready = true;//
}
}
위의 프로그램 이 만약 변수 a 가 volatile 수식 을 사용 하지 않 는 다 면 출력 결 과 는 0 일 가능성 이 높다.읽 어 주 셔 서 감사합니다. 여러분 에 게 도움 이 되 기 를 바 랍 니 다.본 사이트 에 대한 여러분 의 지지 에 감 사 드 립 니 다!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Is Eclipse IDE dying?In 2014 the Eclipse IDE is the leading development environment for Java with a market share of approximately 65%. but ac...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.