[SPRING] 스프링 싱글 톤 빈은 쓰레드에 안전한가요?
SPRING스프링 싱글 톤 빈은 쓰레드에 안전한가요?
Spring Singleton Bean이 스레드로부터 안전한지 여부를 알고 싶습니다. 그렇다면 왜, 그렇다면 왜 그럴까요?
내가 초보자 인 봄에 도움을 주시면 감사하겠습니다.
해결법
-
==============================
1.두 개념은 관련이 없습니다.
두 개념은 관련이 없습니다.
싱글 톤은 창조에 관한 것이다. 이 디자인 패턴은 하나의 클래스 인스턴스 만 작성되도록합니다.
스레드 안전은 실행에 관한 것입니다. Wikipedia의 인용 :
따라서 결국 스레드 안전성은 코드와 코드에만 의존합니다. 그리고 이것이 스프링 빈이 스레드 안전 그 자체가 아닌 이유입니다.
-
==============================
2.Spring Singleton Bean은 Spring이 인스턴스화하기 때문에 스레드로부터 안전하지 않습니다. 죄송합니다.
Spring Singleton Bean은 Spring이 인스턴스화하기 때문에 스레드로부터 안전하지 않습니다. 죄송합니다.
-
==============================
3.Spring은 Singleton Bean의 라이프 사이클을 관리하고 객체의 단일 인스턴스를 유지 관리합니다. 스레드 안전성은 그와 관련이 없습니다.
Spring은 Singleton Bean의 라이프 사이클을 관리하고 객체의 단일 인스턴스를 유지 관리합니다. 스레드 안전성은 그와 관련이 없습니다.
싱글 톤과 스레드 안전성은 두 가지 다른 개념이기 때문에. synchronized 키워드로 스레드 안전성을 확보 할 수 있습니다.
-
==============================
4.나는 다른 인식을 가지고있다 : 스프링 싱글 톤 빈은 한 번 만들어지며 언제든지 사용할 수있는 인스턴스는 하나뿐입니다.
나는 다른 인식을 가지고있다 : 스프링 싱글 톤 빈은 한 번 만들어지며 언제든지 사용할 수있는 인스턴스는 하나뿐입니다.
당신은 비동기 메서드에서 수정 된 인스턴스 변수가 있다고 가정 해 보겠습니다. 다중 스레드 환경에서는 동일한 클래스 인스턴스가 모든 스레드에 할당되고 2 개의 동시 스레드가 예기치 않은 상황을 초래할 수있는 인스턴스 변수를 업데이트 / 변경할 수 있습니다. Singleton Bean은 스레드 안전성을 제공하지 않으며 인스턴스 변수 사용으로 예기치 않은 결과가 발생할 수 있다는 것을 알게되면 같은 문제를 해결할 수있는 두 가지 옵션이 있습니다.
-
==============================
5.왜냐하면 싱글 톤에서 스레드가 아닌 안전한 객체에 대한 참조를 가질 수 있기 때문입니다.
왜냐하면 싱글 톤에서 스레드가 아닌 안전한 객체에 대한 참조를 가질 수 있기 때문입니다.
하지만 그렇지 않으면 스프링을 사용하여 인스턴스 변수를 삽입 한 다음 스레드 안전성을 얻습니다.
-
==============================
6.Spring은 스레드 안전을 보장하지 않습니다. 그것은 당신의 책임입니다. Spring은 Singleton을 만들지 만, 변경 가능한 경우에는 스레드로부터 안전하지 않을 수 있습니다. 프로그래머는 스프링 빈 클래스를 스레드 안전성과 같은 방법으로 관리해야 할 책임이 있습니다.
Spring은 스레드 안전을 보장하지 않습니다. 그것은 당신의 책임입니다. Spring은 Singleton을 만들지 만, 변경 가능한 경우에는 스레드로부터 안전하지 않을 수 있습니다. 프로그래머는 스프링 빈 클래스를 스레드 안전성과 같은 방법으로 관리해야 할 책임이 있습니다.
-
==============================
7.Spring에서는 싱글 톤 빈은 어떤 상태도 갖지 않을 것입니다 (상태 비 저장). 싱글 톤 빈 범위는 BeanFactory 당 단일 인스턴스를 보장한다. 따라서 멀티 스레딩 환경에서는 싱글 톤 범위로도 단일 인스턴스를 보장하지 않습니다.
Spring에서는 싱글 톤 빈은 어떤 상태도 갖지 않을 것입니다 (상태 비 저장). 싱글 톤 빈 범위는 BeanFactory 당 단일 인스턴스를 보장한다. 따라서 멀티 스레딩 환경에서는 싱글 톤 범위로도 단일 인스턴스를 보장하지 않습니다.
그래서이를 해결하기 위해서는 빈 범위를 싱글 톤 범위에서 프로토 타입 범위로 변경해야합니다. 스레드 안전성을 보장하는 것은 개발자의 책임입니다.
-
==============================
8.Singleton Beans는 쓰레드 안전성을 가지지 않거나 스코어가 싱글 톤인 클래스가 어떻게 쓰여지 는가에 달려있다. 각 호출 스레드는 자체 실행을 가지며 클래스가 해당 메서드에서 액세스하는 전역 적으로 변수를 선언하고 모든 호출 스레드에서 공유하는 단일 코드 범위 클래스에 일부 코드가 없으면 다른 스레드의 실행을 방해하지 않습니다. 값이 수정되면 동시성 문제가 발생할 수 있으므로 클래스 수준이 아닌 메서드 수준에서 변수를 사용하는 것이 좋습니다.
Singleton Beans는 쓰레드 안전성을 가지지 않거나 스코어가 싱글 톤인 클래스가 어떻게 쓰여지 는가에 달려있다. 각 호출 스레드는 자체 실행을 가지며 클래스가 해당 메서드에서 액세스하는 전역 적으로 변수를 선언하고 모든 호출 스레드에서 공유하는 단일 코드 범위 클래스에 일부 코드가 없으면 다른 스레드의 실행을 방해하지 않습니다. 값이 수정되면 동시성 문제가 발생할 수 있으므로 클래스 수준이 아닌 메서드 수준에서 변수를 사용하는 것이 좋습니다.
from https://stackoverflow.com/questions/17342850/are-spring-singleton-beans-thread-safe by cc-by-sa and MIT license
'SPRING' 카테고리의 다른 글
[SPRING] Spring과 Hibernate를 사용하는 좋은 샘플 애플리케이션은 무엇인가? [닫은] (0) | 2019.03.04 |
---|---|
[SPRING] Spring MVC : 양식을 게시 할 때 추가되는 URL 경로 (0) | 2019.03.04 |
[SPRING] 스프링 MVC 주석 컨트롤러의 단위 테스트 방법 (0) | 2019.03.04 |
[SPRING] 스프링 보안을 사용하여 실패한 로그인에서 사용자 이름을 얻으려면 어떻게해야합니까? (0) | 2019.03.04 |
[SPRING] URL에서 jsessionid 제거 (0) | 2019.03.04 |