2011-11-29 12 views
6

Chcę móc tworzyć wiele wątków i wysyłać dane do określonego wątku w zależności od tego, co otrzymuje główny program.Wysyłaj dane do określonego wątku

Zasadniczo wysyłam pakiet do programu odbiorczego, który będzie zawierał numer. Ten numer służy do określenia, z którym wątkiem ma się komunikować. Jak mogę wysłać ten pakiet do wątku o tym samym numerze?

Przykład: istnieją gwinty 1,2,3,4 i 5. Mój główny program otrzymuje pakiet o numerze 3. Chcę wysłać ten pakiet do wątku 3.

Jak mogę to osiągnąć?

+0

Dlaczego nie utrzymujesz połączenia przy życiu, a następnie powierzasz dane wysłane/odebrane do wątku zawierającego to gniazdo? –

+0

Tworzę wirtualny router (projekt klasy), więc musi działać jak prawdziwy router. Więc te wątki, które robię, działają jak różne porty dla mojego routera. Nasze pakiety są wysyłane do rzeczywistego portu, którego nasz program nasłuchuje, a nasz program wysyła go do wirtualnego portu (wątku). –

Odpowiedz

6

Utwórz kolejkę dla każdego wątku i każdy wątek będzie słuchał tej kolejki. Twój główny wątek może następnie umieścić dane (lub "wiadomość") w każdej kolejce.

Po prostu chcesz się upewnić, że wybrana struktura kolejki jest bezpieczna dla dostępu współbieżnego (wątkowo). Coś jak na LinkedBlockingQueue powinien zrobić ładnie.

+0

Podoba mi się! Czy kolejki są tworzone w wątku głównym lub w wątkach podrzędnych lub obu? –

+1

Gdziekolwiek chcesz, chociaż bym je tworzył wraz z tworzeniem każdego wątku - co oznaczałoby, że zostały utworzone w głównym wątku. Następnie uzyskują do nich dostęp zarówno wątek główny, jak i wątek podrzędny, z głównym wątkiem przesuwającym dane do kolejki oraz wątkami potomnymi pobierającymi dane z kolejki. – ziesemer

+0

Oto przykład wzorca producent-konsument za pomocą BlockingQueues. http://www.javamex.com/tutorials/synchronization_producer_consumer_2.shtml – Luhar

Powiązane problemy