자바 병렬 프로 그래 밍 학습 의 ThreadLocal
1983 단어 자바
로 컬 스 레 드 는 일반적으로 가 변 적 인 단일 인 스 턴 스 대상 이나 전체 변 수 를 공유 하 는 것 을 방지 하 는 데 사 용 됩 니 다.예 를 들 어 데이터 베이스 연결 등 이 있 습 니 다.ThreadLocal 을 Map 으로 볼 수 있 습 니 다.실제로 그렇게 이 루어 진 것 은 아니 지만.또한 트 랜 잭 션 컨 텍스트 를 ThreadLocal 에 저장 할 수 있 습 니 다.일부 기능 을 편리 하 게 처리 할 수 있 지만 내 현적 으로 결합 도 를 증가 시 켜 코드 의 재 활용 성 을 낮 출 수 있 기 때문에 ThreadLocal 의 남용 을 최대한 피 할 수 있 습 니 다.ThreadLocal 은 get 과 set 에서 자주 사용 하 는 방법 을 제공 합 니 다.set 는 값 을 설정 하 는 데 사 용 됩 니 다.get 은 set 설정 의 최신 값 을 가 져 오 는 데 사 용 됩 니 다.이 값 들 은 변 경 된 스 레 드 를 사용 하 는 것 에 비해 독립 된 복사 본 입 니 다.
예시
public class NotSafeDemo2 {
private ThreadLocal num = new ThreadLocal<>();
public void add(int value) {
try {
if (null == num.get()) {
num.set(0);
}
int temp = num.get();
num.set(num.get() + value);
Thread.sleep(100);
System.out.println(value + "+" + temp + "=" + num.get());
} catch (InterruptedException e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
NotSafeDemo2 synchronizeDemo = new NotSafeDemo2();
AddThread3 addThread3 = new AddThread3(synchronizeDemo);
AddThread4 addThread4 = new AddThread4(synchronizeDemo);
addThread3.start();
addThread4.start();
}
}
class AddThread3 extends Thread {
NotSafeDemo2 synchronizeDemo;
public AddThread3(NotSafeDemo2 synchronizeDemo) {
this.synchronizeDemo = synchronizeDemo;
}
@Override
public void run() {
synchronizeDemo.add(1);
}
}
class AddThread4 extends Thread {
NotSafeDemo2 synchronizeDemo;
public AddThread4(NotSafeDemo2 synchronizeDemo) {
this.synchronizeDemo = synchronizeDemo;
}
@Override
public void run() {
synchronizeDemo.add(2);
}
}
실행 결 과 는 다음 과 같 습 니 다.자바 병렬 프로 그래 밍 학습 의 synchronize(1)의 예 를 직접 변경 하면 num 의 값 이 스 레 드 에 공유 되 지 않 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 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에 따라 라이센스가 부여됩니다.