2017-10-20 3 views
0

단일 스레드 응용 프로그램이 주어졌으며 다중 스레드되도록했습니다. 사용되는 많은 싱글 톤 인스턴스가 있습니다.@prototype 범위가 멀티 스레딩에서 어떻게 도움이되는지

싱글 톤 인스턴스가 여러 스레드간에 공유되면 해당 인스턴스의 모든 변수가 여러 스레드간에 공유된다는 것을 알고 있습니다.

예를 들어, 카운트 변수가 있으며, 이는 싱글 톤 인스턴스 변수입니다. 내 생각은 각 스레드가 '카운트'를 증가시켜야한다는 것입니다. 각 스레드는 한 번만 증가합니다. 따라서 카운터는 1이어야합니다. 공유 객체의이 변수를 증가 시키면 모든 스레드가 해당 값을 가져옵니다. 따라서 두 번째 스레드가 수행 할 때 값은 1이 아닌 2가됩니다. 증가하는 n 번째 스레드의 경우 값은 1이 아닌 n이됩니다.

Inorder이 문제를 방지하기 위해 프로토 타입 해당 클래스의 범위. 이제 각 스레드에 대해 새 개체를 가져오고 카운터는 각 스레드마다 1을 유지합니다.

이것은 프로토 타입 범위를 사용하는 방법입니다. 이 말이 맞는가요? 나는 카운터에 대한 예제를 주었다. 공유 인스턴스에는 여러 유형의 변수가 많이있다. 제 프로토 타입을 사용하는 것이 타당합니까?

답변

0

위의 용도로 로컬 변수를 사용할 수 있습니다. 인스턴스 변수 일 필요는 없습니다.

이 문제를 방지하기 위해이 클래스의 프로토 타입 범위를 사용했습니다. 지금 각 스레드에 대해 새 개체를 가져오고 카운터는 각 스레드에 대해 1 으로 유지됩니다.

이것은 프로토 타입 범위를 사용하는 방법입니다. 이것은 을 감지합니까?

이전에 말한 것처럼 인스턴스 변수에 대한 사례가 표시되지 않습니다.이 변수는 로컬 변수로 쉽게 풀 수 있습니다. 싱글 톤 범위 Bean에 주입 된 프로토 타입 범위 Bean이있는 careful이어야합니다. Spring Prototype scoped bean in a singleton

+0

이것은 '카운터'라는 단일 변수에 관한 것이 아니라 많은 변수가 있습니다. – hars

+0

변수가 다른 스레드에서 공유 할 필요가없는 경우 로컬 변수 (메소드 내에 수명주기가 포함 된 변수)가 될 수 있습니다. –

+0

@hars이 질문에 대한 답변을 수락하면 동료 SO 사용자에게 도움이됩니다 –

관련 문제