2012-12-08 15 views
13

Ứng dụng web của tôi sử dụng IOC mùa xuân. Vì vậy, tất cả các hạt đậu mùa xuân của tôi sẽ được singleton (theo mặc định). Trong trường hợp nếu hai yêu cầu cố gắng truy cập vào hai phương pháp khác nhau của một lớp duy nhất. Ví dụ: MySpringBean là một lớp có hai phương pháp searchRecordinsertRecord phương pháp.Nếu tại cùng một thời điểm, cả hai phương pháp đều được thử truy cập thông qua cùng một bean.Làm cách nào để xử lý đồng thời đậu mùa xuân

Làm thế nào để cùng một bean mùa xuân có sẵn cho cả khách hàng cùng lúc hoặc nó sẽ là vấn đề đồng thời khi cả hai yêu cầu sẽ cố gắng truy cập hai phương thức khác nhau nhưng thông qua cùng một bean mùa xuân. và kể từ khi đậu mùa xuân là singleton nên trường hợp mới không thể được hình thành. Trong trường hợp này như thế nào là điều này sẽ làm việc?

Trả lời

7

Trước tiên, bạn phải hiểu khi nào sự đồng thời có thể gây ra sự cố. Nếu bean Spring của bạn không có trạng thái bất định (nó không có bất kỳ trường nào, tất cả các trường là final hoặc tất cả các trường chỉ được gán một lần), nhiều luồng có thể sử dụng cùng một bean hoặc thậm chí cùng một phương thức.

Xem thêm:

4

Nếu bean là một singleton, sau đó mùa xuân sẽ cung cấp cho bạn những ví dụ tương tự ở bất kỳ chủ đề. Đó là vào bạn để làm cho đậu thread-an toàn. Vì đó là một singleton, bạn nên làm cho lớp đó trở thành không trạng thái.

4

Như những người khác đã đề xuất, mùa xuân sẽ cung cấp cùng một trường hợp cho tất cả các chủ đề trong trường hợp của "singleton" đậu.

Điều bạn cần hiểu là các chuỗi làm tất cả công việc trong một hệ thống bằng cách thực thi mã trong khi các đối tượng cung cấp trạng thái và hành vi (mã). Vì vậy, nó thực sự là có thể cho nhiều chủ đề (yêu cầu trong trường hợp của bạn), để đồng thời chạy các phương pháp tương tự trong một hạt đơn. Bạn có thể làm cho đậu như không quốc tịch như Tomasz đề nghị hoặc nếu không làm cho họ "thread-an toàn".