Tôi có một bean Spring đơn (phạm vi mặc định). Vì vậy, một ví dụ sẽ được sử dụng bởi nhiều chủ đề. Tuy nhiên, tôi hơi bối rối về vấn đề an toàn luồng, dường như tất cả các Spring bean đều an toàn nếu chúng không trạng thái, nhưng đậu của tôi không phải là không trạng thái, nó có các biến cá thể khác nhau được sử dụng bởi mỗi yêu cầu/các bộ điều khiển/lớp khác.Spring MVC Singleton thread safety?
Đây là sự khởi đầu của đậu singleton tôi:
public class PcrfSimulator {
private final CustomGxSessionIdCacheImpl gxSessionIdCache = new CustomGxSessionIdCacheImpl();
private final PcrfRecord pcrfRec = new PcrfRecord();
private final ResponseConditions responseConditions = new ResponseConditions();
public CustomGxSessionIdCacheImpl getGxSessionIdCache() {
return gxSessionIdCache;
}
public ArrayList<Rule> getRules() {
return pcrfRec.getRules();
}
Vì vậy, các lĩnh vực trên sẽ được truy cập bởi nhiều chủ đề - là nó đủ để đánh dấu các lĩnh vực này là dễ bay hơi, hoặc làm tôi phải đánh dấu những methods mà truy cập chúng (có rất nhiều trong không chỉ lớp này, nhưng bộ điều khiển khác/lớp học cũng) với đồng bộ và sử dụng chờ đợi/thông báo vv?
Rất cám ơn!
Cảm ơn Ralph, nhưng cuối cùng không chỉ có nghĩa là chúng chỉ có thể được khởi tạo một lần? Tôi nói điều này bởi vì trong đoạn mã các biến cuối cùng được cập nhật như vậy: gxSessionIdCache.addIpAddress (gxSessionId, ipAddress) - thực sự chúng được cập nhật khi được chuyển thành tham số cho các phương thức không sử dụng trường cuối cùng - tức là doStuff (GxSessionIDCache gxSessionIdCache) {... } – Rory
Tôi giả định rằng đối tượng "đằng sau" biến cuối cùng cũng "có hiệu lực không quốc tịch" – Ralph
@Rory: Tôi đã mở rộng đoạn đó một chút, để làm cho nó rõ ràng. – Ralph