2010-11-15 30 views
6

Hãy để tôi cung cấp cho bạn kịch bản.Có an toàn để giữ một tham chiếu đến một chuỗi trong một singleton không?

Giả sử Hoạt động đầu tiên của tôi tải lên, cũng tạo một chuỗi sẽ chạy vô thời hạn ở chế độ nền.

Bây giờ, nếu tôi chuyển sang Hoạt động khác, tôi giả định rằng chuỗi mà tôi đã tạo ban đầu trong hoạt động chính sẽ tiếp tục chạy.

Vì vậy, bây giờ đến câu hỏi chính của tôi - để quản lý chuỗi nền này từ các Hoạt động khác, có an toàn để lưu trữ tham chiếu đến chuỗi đó trong một đối tượng đơn lẻ không?

+0

Tôi đã làm điều tương tự ở một trong các ứng dụng của mình. Không có vấn đề gì. Mặc dù, tôi đã chuyển sang TimerTask được lên lịch sau đó. Dường như an toàn hơn và dễ sử dụng hơn. –

Trả lời

4

Có và không. Về mặt lý thuyết, bạn sẽ không có vấn đề gì, nhưng bạn không được phép tham chiếu để trốn thoát.

Sự cố có thể phát sinh từ việc giữ tham chiếu trong đối tượng đơn lẻ riêng tư, không được chuyển tham chiếu đến bất kỳ mục đích nào khác hoặc cho phép truy cập vào bất kỳ mục đích nào khác hoặc có thể mất quyền kiểm soát.

Thứ hai, chuỗi được tạo bởi hoạt động của bạn không được cho phép truy cập vào các biến thành viên của nó hoặc cho phép tham chiếu đến chúng để thoát.

Một cuốn sách tốt về lĩnh vực này là "Java Concurrency in Practice" của Brian Goetz

+0

+1 để quy định rằng singleton phải luôn có quyền kiểm soát (không phải hoạt động có nguồn gốc) –

+0

Làm cho cảm giác hoàn hảo - cảm ơn bạn đã xóa thông tin đó. Chuỗi được đề cập sẽ tự chứa và sẽ không chia sẻ bất kỳ thứ gì. – xil3

2

Trên thực tế, nơi bạn cần phải cẩn thận là nếu bạn có nhiều bộ tải lớp. Singleton chỉ là một singleton nếu bạn đang sử dụng cùng một trình nạp lớp để nạp lớp vào. Nếu bạn có nhiều trình nạp lớp trong ứng dụng đang chạy cùng một lớp, bạn sẽ có một cá thể khác của singleton trong mỗi lớp.

Hầu hết các ứng dụng độc lập chỉ sử dụng một trình nạp lớp và do đó không có bất kỳ sự cố nào. Nếu bạn chỉ có một trình nạp lớp thì bạn sẽ ổn thôi.

+0

+1 một cách tiềm năng khác để truy cập được xuất bản/chia sẻ. – Jaydee

Các vấn đề liên quan