Spring 은 동시 방문 의 스 레 드 안전성 문 제 를 어떻게 해결 합 니까?

2230 단어 자바spring
springmvc 의 controller 는 singleton 의(비 스 레 드 안전)입 니 다.이것 은 아마도 그 와 struts 2 의 차이 일 것 입 니 다!Struts 와 마찬가지 로 Spring 의 Controller 는 기본적으로 Singleton 입 니 다.이것 은 모든 request 가 오 면 시스템 이 원래 의 intance 로 처리 한 다 는 것 을 의미 합 니 다.이렇게 해서 두 가지 결 과 를 초래 했 습 니 다.하 나 는 우리 가 매번 Controller 를 만 들 지 않 아 도 되 고 다른 하 나 는 대상 이 만 들 고 쓰레기 를 수집 하 는 시간 을 줄 였 습 니 다.하나의 Controller 인 스 턴 스 만 있 기 때문에 여러 스 레 드 가 호출 될 때 인 스 턴 스 변 수 는 스 레 드 가 안전 하지 않 고 데 이 터 를 조작 하 는 문제 가 발생 할 수 있 습 니 다.물론 대부분의 상황 에서 우 리 는 스 레 드 안전 문 제 를 고려 할 필요 가 없다.예 를 들 어 dao,service 등 은 bean 에서 인 스 턴 스 변 수 를 설명 하지 않 는 한.따라서,우 리 는 spring mvc 의 contrller 를 사용 할 때,contrller 에서 인 스 턴 스 변 수 를 정의 하 는 것 을 피해 야 합 니 다. 
 
       컨트롤 러 가 단일 형식 을 사용 하고 controller 에 개인 변수 a 가 있다 면 같은 controller 에 요청 할 때 사용 하 는 a 변 수 는 공용 입 니 다.즉,어떤 요청 에서 이 변 수 를 수정 했다 면 다른 요청 에서 이 변 경 된 내용 을 읽 을 수 있 습 니 다.몇 가지 해결 방법 이 있 습 니 다.1.Controller 에서 ThreadLocal 변 수 를 사용 합 니 다.2.spring 프로필 Controller 에서 scope="prototype"을 설명 하고 매번 새로운 contrller 를 만 듭 니 다.
spring 을 사용 하여 웹 을 개발 할 때 기본 Controller,Dao,Service 는 모두 하나의 예 입 니 다.
 
ThreadLocal 사용 사례:
 ThreadLocalstartTime = newThreadLocal();      ThreadLocal   

startTime.set(System.currentTimeMillis());      

startTime.get();     


 
ThreadLocal 은 스 레 드 동기 화 체제 에 비해 어떤 장점 이 있 습 니까?
ThreadLocal 과 스 레 드 동기 화 체 제 는 다 중 스 레 드 에서 같은 변수의 접근 충돌 문 제 를 해결 하기 위해 서 입 니 다.
동기 화 체제 에서 대상 의 잠 금 체 제 를 통 해 같은 시간 에 하나의 스 레 드 접근 변 수 를 확보 합 니 다.이때 이 변 수 는 여러 스 레 드 로 공 유 된 것 입 니 다.동기 화 체 제 를 사용 하여 프로그램 이 언제 변 수 를 읽 고 쓰 는 지,언제 대상 을 잠 그 고 언제 대상 자 물 쇠 를 풀 어야 하 는 지 등 복잡 한 문 제 를 신중하게 분석 해 야 합 니 다.프로그램 설계 와 작성 이 상대 적 으로 어렵 습 니 다.
ThreadLocal 은 다 중 스 레 드 의 동시 방문 을 다른 각도 에서 해결 합 니 다.ThreadLocal 은 모든 스 레 드 에 독립 된 변수 복사 본 을 제공 하여 여러 스 레 드 가 데이터 에 대한 접근 충돌 을 격 리 합 니 다.모든 스 레 드 는 자신의 변수 사본 을 가지 고 있 기 때문에 이 변 수 를 동기 화 할 필요 가 없습니다.ThreadLocal 은 스 레 드 안전 한 공유 대상 을 제공 합 니 다.다 중 스 레 드 코드 를 작성 할 때 안전 하지 않 은 변 수 를 ThreadLocal 에 밀봉 할 수 있 습 니 다.
요약 하면 다 중 스 레 드 자원 공유 문제 에 대해 동기 화 체 제 는'시간 으로 공간 을 바꾼다'는 방식 을 사 용 했 고 ThreadLocal 은'공간 으로 시간 을 바꾼다'는 방식 을 사용 했다.전 자 는 하나의 변 수 를 제공 하여 서로 다른 스 레 드 를 줄 지어 방문 하 게 하고 후 자 는 모든 스 레 드 에 변 수 를 제공 하기 때문에 서로 영향 을 주지 않 고 동시에 방문 할 수 있다.

좋은 웹페이지 즐겨찾기