2009-08-24 25 views
7

Không trong quá trình instantiation, nhưng một khi instantiation của đối tượng singleton được thực hiện, điều gì sẽ xảy ra nếu hai hoặc nhiều chủ đề đang cố gắng truy cập vào cùng một đối tượng? Đặc biệt trong trường hợp đối tượng singleton mất rất nhiều thời gian để xử lý yêu cầu (nói 1 phút) ... Trong trường hợp này, nếu cho ví dụ, 5 chủ đề cố gắng truy cập vào cùng một đối tượng đơn lẻ, kết quả sẽ là gì?điều gì sẽ xảy ra nếu nhiều hơn một chủ đề cố gắng truy cập đối tượng đơn lẻ

Câu hỏi bổ sung: thông thường khi nào chúng ta nên chọn mẫu đơn và khi nào chúng ta nên tránh?

+1

Câu trả lời cho câu hỏi của bạn, đúng là "nó thực sự phụ thuộc". Loại singleton nào? tức là nó làm gì và nó hoạt động như thế nào? Và bằng ngôn ngữ nào? –

Trả lời

5

Trừ khi đồng bộ hóa (khóa) đang được thực hiện trong Singleton, câu trả lời là: đây là miễn phí cho tất cả.

Mặc dù Singleton đảm bảo rằng chỉ một thể hiện của đối tượng được sử dụng khi được yêu cầu, bản thân mẫu không tự cung cấp bất kỳ hình thức an toàn luồng nào. Điều này được để lại cho người thực hiện.

Trong trường hợp cụ thể mà bạn trích dẫn (với phương pháp chạy dài), điều quan trọng là phải đồng bộ hóa quyền truy cập vào bất kỳ phương pháp nào sử dụng biến cấp lớp hoặc đối tượng. Việc không làm như vậy sẽ có thể dẫn đến các điều kiện chủng tộc.

Chúc may mắn!

+0

Vâng, nói chung, singleton cần phải là chủ đề an toàn. Khóa là một khả năng, nhưng như vậy là vô quốc tịch. –

0

Một singleton không khác với bất kỳ đối tượng nào khác ngoài chỉ có một trường hợp. Điều gì xảy ra khi bạn cố gắng truy cập nó sẽ phụ thuộc phần lớn vào những gì mà các luồng truy cập đang cố gắng (ví dụ đọc vs ghi) và loại dữ liệu mà singleton của bạn đang nắm giữ.

0

Câu trả lời cho câu hỏi của bạn đúng như vậy là "nó thực sự phụ thuộc". Loại singleton nào? tức là nó làm gì và nó hoạt động như thế nào? Và bằng ngôn ngữ nào?

Thực tế là tệp đơn lẻ) chỉ ra lệnh và thực thi rằng bạn chỉ có thể có một phiên bản của một đối tượng nhất định. Trong chính nó nó không nói bất cứ điều gì về nhiều chủ đề truy cập đối tượng đó. Vì vậy, nếu được mã hóa đúng (với đồng bộ hóa chuỗi được triển khai chính xác) thì không có lý do tại sao nó không hoạt động đúng - ngay cả khi các yêu cầu đối tượng mất nhiều thời gian để xử lý!

2

Quy tắc chung của ngón tay cái tôi sử dụng cho Singletons là nó không ảnh hưởng đến mã đang chạy và không có tác dụng phụ. Về cơ bản đối với tôi, trong các dự án của tôi, dịch này thành một số chức năng ghi nhật ký, hoặc tra cứu giá trị tĩnh (ví dụ: tải một số dữ liệu chung từ cơ sở dữ liệu một lần và lưu trữ nó để tham khảo, vì vậy nó không cần phải đọc mỗi khi cần) .

0

Sau đó, bạn cần triển khai an toàn luồng mẫu đơn.

Tìm bài viết this hữu ích cho cùng mô tả hầu hết các kịch bản đa luồng của mẫu đơn.

HTH!

+0

Lưu ý rằng các câu trả lời chỉ có liên kết không được khuyến khích, các câu trả lời SO phải là điểm kết thúc của việc tìm kiếm giải pháp (so với một điểm dừng khác của tham chiếu, có xu hướng bị giảm thời gian). Vui lòng xem xét thêm bản tóm tắt độc lập tại đây, giữ liên kết dưới dạng tham chiếu. – kleopatra

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