복붙노트

[SPRING] Spring bean은 동시성을 어떻게 처리하나요?

SPRING

Spring bean은 동시성을 어떻게 처리하나요?

내 웹 응용 프로그램은 봄 IOC를 사용합니다. 따라서 모든 스프링 빈은 싱글 톤 (기본적으로)이 될 것입니다. 두 개의 요청이 단일 클래스의 두 가지 다른 메소드에 액세스하려고하는 경우에 사용합니다. 예를 들면 다음과 같습니다. MySpringBean은 searchRecord 및 insertRecord 메소드의 두 메소드가있는 클래스입니다. 동일한 순간에 두 메소드 모두 동일한 bean을 통해 액세스하려고 시도합니다.

동일한 스프링 빈이 동시에 클라이언트에서 사용 가능할 때, 또는 두 요청이 모두 동일한 스프링 빈을 통해 두 개의 다른 메소드에 액세스하려고 할 때 동시성 문제가 될 수 있습니다. 스프링 빈은 싱글 톤이므로 새로운 인스턴스를 만들 수 없습니다.이 경우 어떻게 작동할까요?

해결법

  1. ==============================

    1.동시성으로 인해 문제가 발생할 수있는시기를 먼저 이해해야합니다. Spring bean이 stateless (모든 필드가 없거나 모든 필드가 final이거나 그것들 모두가 한번만 할당된다면), 다중 쓰레드는 안전하게 동일한 bean을 사용할 수있다.

    동시성으로 인해 문제가 발생할 수있는시기를 먼저 이해해야합니다. Spring bean이 stateless (모든 필드가 없거나 모든 필드가 final이거나 그것들 모두가 한번만 할당된다면), 다중 쓰레드는 안전하게 동일한 bean을 사용할 수있다.

  2. ==============================

    2.빈이 싱글 톤이면 Spring은 모든 스레드에서 동일한 인스턴스를 제공합니다. Bean을 스레드로부터 안전하게 만드는 것은 당신에게 달려 있습니다. 싱글 톤이기 때문에, 당신은 그 클래스를 무국적으로 만드는 것이 가장 좋을 것입니다.

    빈이 싱글 톤이면 Spring은 모든 스레드에서 동일한 인스턴스를 제공합니다. Bean을 스레드로부터 안전하게 만드는 것은 당신에게 달려 있습니다. 싱글 톤이기 때문에, 당신은 그 클래스를 무국적으로 만드는 것이 가장 좋을 것입니다.

  3. ==============================

    3.다른 사람들이 이미 제안했듯이 Spring은 "싱글 톤"빈의 경우 모든 스레드에 동일한 인스턴스를 제공 할 것입니다.

    다른 사람들이 이미 제안했듯이 Spring은 "싱글 톤"빈의 경우 모든 스레드에 동일한 인스턴스를 제공 할 것입니다.

    이해해야 할 것은 객체가 상태와 동작 (코드)을 제공하는 동안 스레드가 코드를 실행하여 시스템에서 모든 작업을 수행한다는 것입니다. 그래서 실제로 여러 스레드 (귀하의 경우에는 요청)가 단일 톤 빈에서 동일한 메소드를 동시에 실행하는 것이 가능합니다. Tomasz가 제안하거나 그렇지 않으면 "thread-safe"하게 만들 때 이러한 bean을 stateless로 만들 수 있습니다.

  4. ==============================

    4.자바 싱글 톤과 스프링 싱글 톤은 다릅니다. 스프링 싱글 톤 범위는 컨텍스트 내에서 사용할 수 있습니다.

    자바 싱글 톤과 스프링 싱글 톤은 다릅니다. 스프링 싱글 톤 범위는 컨텍스트 내에서 사용할 수 있습니다.

    Java 싱글 톤 범위는 JVM 클래스 로더에 있습니다. Spring 컨텍스트를 통해서만 가능한 동시 요청

  5. from https://stackoverflow.com/questions/13776728/how-does-spring-bean-handle-concurrency by cc-by-sa and MIT license