2011-11-29 11 views
6

Desidero essere in grado di creare più thread e inviare dati a un thread specifico in base a ciò che riceve il programma principale.Invia dati a una thread specifica

Fondamentalmente sto inviando un pacchetto a un programma di ricezione che conterrà un numero. Questo numero è usato per determinare con quale thread vuole comunicare. Come posso inviare quel pacchetto a un thread con lo stesso numero?

Esempio: le filettature 1,2,3,4 e 5 esistono. Il mio programma principale riceve un pacchetto con il numero 3. Voglio inviare quel pacchetto al thread 3.

Come posso ottenere questo?

+0

Perché non mantenere attiva la connessione quindi affidare i dati inviati/ricevuti al thread contenente quella presa? –

+0

Sto creando un router virtuale (un progetto di classe), quindi deve agire come un vero router. Quindi questi thread che sto facendo agiscono come porte differenti per il mio router. I nostri pacchetti vengono inviati alla porta reale che il nostro programma sta ascoltando e il nostro programma quindi lo invia a una porta virtuale (thread). –

risposta

6

Creare una coda per ogni thread e fare in modo che ogni thread ascolti quella coda. Il thread principale può quindi inserire dati (o un "messaggio") su ogni coda.

Volete solo assicurarvi che la struttura della coda scelta sia sicura per l'accesso simultaneo (thread-safe). Qualcosa come un LinkedBlockingQueue dovrebbe fare bene.

+0

Mi piace! Le code sono create nel thread principale o nei thread figli o entrambi? –

+1

Ovunque lo desideri, anche se li creerei insieme alla creazione di ciascun thread, il che significherebbe che vengono creati nel thread principale. Vengono quindi raggiunte sia dai thread principali che da quelli secondari, con il thread principale che invia i dati alla coda e i thread secondari che estraggono i dati dalla coda. – ziesemer

+0

Ecco un esempio del modello produttore-consumatore che utilizza BlockingQueues. http://www.javamex.com/tutorials/synchronization_producer_consumer_2.shtml – Luhar