Tôi gặp vấn đề mà tôi tin là mẫu tổng thể/nhân viên cổ điển và tôi đang tìm kiếm lời khuyên về việc triển khai. Dưới đây là những gì tôi hiện đang suy nghĩ về vấn đề:Mẫu/Nguyên tắc cho hàng đợi an toàn và chương trình "thạc sĩ/công nhân" trong Java
Có một "hàng đợi" toàn cầu thuộc loại nào đó và đó là nơi trung tâm nơi "công việc phải làm" được lưu giữ. Có lẽ hàng đợi này sẽ được quản lý bởi một loại đối tượng "chính". Chủ đề sẽ được sinh ra để đi tìm việc phải làm, và khi họ tìm việc phải làm, họ sẽ nói với chủ nhân (bất cứ điều gì) để "thêm cái này vào hàng đợi công việc phải làm".
Chủ nhân, có lẽ trong một khoảng thời gian, sẽ sinh ra các chủ đề khác thực sự thực hiện công việc cần thực hiện. Khi một thread hoàn thành công việc của nó, tôi muốn nó thông báo cho chủ nhân rằng công việc đã hoàn thành. Sau đó, tổng thể có thể xóa tác phẩm này khỏi hàng đợi.
Tôi đã thực hiện một số lượng hợp lý các chương trình chuỗi trong Java trong quá khứ, nhưng tất cả đã ở trước JDK 1.5 và do đó tôi không quen với các API mới thích hợp để xử lý trường hợp này. Tôi hiểu rằng JDK7 sẽ có ngã ba, và đó có thể là một giải pháp cho tôi, nhưng tôi không thể sử dụng sản phẩm truy cập sớm trong dự án này.
Những vấn đề, như tôi đã nhìn thấy chúng, là:
1) làm thế nào để có "đề làm công việc" truyền đạt lại cho các bậc thầy nói với họ rằng công việc của họ là đầy đủ và rằng các bậc thầy bây giờ có thể loại bỏ các làm việc từ hàng đợi
2) cách bảo đảm chính hiệu quả rằng công việc chỉ được lên lịch một lần. Ví dụ: giả sử hàng đợi này có hàng triệu mục và muốn nói với một nhân viên "hãy làm 100 điều này". Cách hiệu quả nhất để đảm bảo rằng khi nó lên kế hoạch làm việc cho công nhân tiếp theo, nó sẽ là "100 điều tiếp theo" chứ không phải "100 điều tôi đã lên lịch"?
3) chọn cấu trúc dữ liệu thích hợp cho hàng đợi. Suy nghĩ của tôi ở đây là "chủ đề tìm việc phải làm" có khả năng tìm ra công việc tương tự để làm nhiều hơn một lần, và họ sẽ gửi một thông điệp tới vị thầy nói "đây là công việc", và thầy sẽ nhận ra rằng tác phẩm có đã được lên lịch và do đó nên bỏ qua thông báo. Tôi muốn đảm bảo rằng tôi chọn cấu trúc dữ liệu phù hợp để tính toán này rẻ nhất có thể.
Theo truyền thống, tôi đã thực hiện điều này trong cơ sở dữ liệu, theo kiểu máy trạng thái hữu hạn, làm việc "nhiệm vụ" từ đầu đến cuối. Tuy nhiên, trong vấn đề này, tôi không muốn sử dụng một cơ sở dữ liệu vì khối lượng cao và biến động của hàng đợi. Ngoài ra, tôi muốn giữ nó càng nhẹ càng tốt. Tôi không muốn sử dụng bất kỳ máy chủ ứng dụng nào nếu điều đó có thể tránh được. Rất có thể vấn đề này tôi đang mô tả là một vấn đề phổ biến với một tên nổi tiếng và các giải pháp được chấp nhận, nhưng tôi, với mức độ không phải là CS, không biết điều này được gọi là gì (tức là hãy nhẹ nhàng).
Cảm ơn bất kỳ và tất cả các con trỏ.
bạn cũng có thể muốn xem http://lambda-the-ultimate.org/node/3521 "Một ngã ba/khung công tác Java" –