저는 스프링 빈을 선언했습니다. 스프링 빈은 내 이메일 서버를 매회 폴링합니다. 메일이있는 경우 메일을 가져 와서 첨부 파일을 추출하려고 시도합니다. 이 파일들은 안전하게 보관하는 업 로더에 제출됩니다. 업 로더는 Spring bean으로 선언됩니다. 세 번째 빈은 이메일의 보낸 사람을 파일의 파일 이름과 연관시켜 DB에 저장합니다.기본 빈 범위를 싱글 톤으로 설정하면 동시 호출이 발생할 때 나쁘지 않을까요?
몇 사람이 동시에 이메일을 보내려고 시도했을 때, 지저분한 일이 일어났습니다. DB의 레코드에 잘못된 파일 이름이 있습니다. 일부는 파일 이름을 전혀 얻지 못했습니다.
나는 기본적으로 bean의 범위를 singleton으로 지정했기 때문에 문제가 발생했다고 생각했습니다. 이것은 많은 스레드가 아마 하나의 동일한 인스턴스를 동시에 엉망으로 만들고 있음을 의미합니다. 문제는이를 해결하는 방법입니다.
모든 민감한 방법을 동기화하면 모든 스레드가 스택되어 서로 기다릴 수 있습니다. 이는 멀티 스레딩에 대한 전체적인 생각에 부합합니다. 콩을 범위 지정 한편
은 "요청"새로운 우리가 메모리 소비에 대해 얘기하면, 하나 정말 좋지 않아 그들 각각의 인스턴스 및 스레드 스케줄링 내가을 만들려고합니다 혼란스러워. 어떻게해야합니까?
하지만, 더 중요한 것은 ... 당신의 접근 방식을 재 방문 가치가있을 수도 있습니다 호출 된 메소드가 다른 스레드가 의존하는 인스턴스 데이터를 수정하지 않도록해야합니다. 코드를 제공하지 않았으므로 추측 만하고 있지만 단순한 메소드 동기화 이상의 의미 일 것입니다. 데이터를 덮어 쓰기 전에 체계적인 문제가있는 것처럼 보입니다. –