2011-11-29 37 views
6

Tôi muốn có thể tạo nhiều luồng và gửi dữ liệu đến một chuỗi cụ thể dựa trên những gì chương trình chính nhận được.Gửi dữ liệu đến một chủ đề cụ thể

Về cơ bản tôi đang gửi gói tới chương trình nhận sẽ chứa một số. Số này được sử dụng để xác định chuỗi nào nó muốn giao tiếp. Làm thế nào tôi có thể gửi gói tin đó đến một sợi có cùng số đó?

Ví dụ: chuỗi 1,2,3,4 và 5 tồn tại. Chương trình chính của tôi nhận được một gói với số 3. Tôi muốn gửi gói đó đến chủ đề 3.

Làm cách nào để tôi có thể đạt được điều này?

+0

Tại sao bạn không giữ kết nối còn sống sau đó ủy thác dữ liệu được gửi/nhận tới luồng chứa ổ cắm đó? –

+0

Tôi đang tạo một bộ định tuyến ảo (một dự án lớp) để nó cần hoạt động giống như một bộ định tuyến thực. Vì vậy, những chủ đề tôi đang làm là hành động như các cổng khác nhau cho router của tôi. Các gói tin của chúng tôi đang được gửi đến cổng thực mà chương trình của chúng tôi đang lắng nghe và chương trình của chúng tôi sau đó gửi nó đến một cổng ảo (luồng). –

Trả lời

6

Tạo hàng đợi cho mỗi chuỗi và yêu cầu mỗi chuỗi lắng nghe hàng đợi đó. Chủ đề chính của bạn sau đó có thể đặt dữ liệu (hoặc một "thông báo") trên mỗi hàng đợi.

Bạn chỉ muốn đảm bảo rằng cấu trúc xếp hàng bạn chọn là an toàn để truy cập đồng thời (an toàn chỉ chuỗi). Một cái gì đó giống như một LinkedBlockingQueue nên làm độc đáo.

+0

Tôi thích nó! Hàng đợi có được tạo trong chủ đề chính hay trong các chuỗi con hoặc cả hai? –

+1

Bất cứ nơi nào bạn muốn, mặc dù tôi muốn tạo chúng cùng với việc tạo ra từng sợi - điều đó có nghĩa là chúng được tạo ra trong chuỗi chính. Sau đó chúng được truy cập bởi cả hai chủ đề chính và con, với luồng chính đẩy dữ liệu vào hàng đợi, và các chủ đề con kéo dữ liệu ra khỏi hàng đợi. – ziesemer

+0

Dưới đây là ví dụ về mẫu người tiêu dùng sản xuất sử dụng BlockingQueues. http://www.javamex.com/tutorials/synchronization_producer_consumer_2.shtml – Luhar

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