Salve a tutti!!
Sto studiando l'esempio del classico server Multithread, cioè ad ogni nuova connessione apro un thread associato a quel socket.
Per avere contezza dei thread, e quindi delle comunicazioni aperte, uso una Hashtable, in cui dopo aver creato il thread relativo alla connessione inserisco un record con:
Key = th.getName()
Object = "Il thread stesso"
Ho pensato di creare un altro Thread di sistema che cicla continuamente questa mappa per verificare se un thread è attivo oppure no... Se il thread risulta inattivo, lo voglio chiudere.
Per fare questo ho usato questo codice:
Come ho scritto nel commento, quando nel primo for invoco il "get(key)" il passaggio dell'oggetto contenuto nella Hashtable non avviene per riferimento, per cui la chiamata successiva a "closeChannel()" chiuderà il thread copia estratto dalla tab e lascerà in esecuzione il thread originale....codice:public static void main(String[] args) { Hashtable<String, MyObj> tab = new Hashtable(); MyObj value = new MyObj(); value.setStr("Ciao"); value.start(); tab.put(value.getName(), value); for (Enumeration e = tab.keys(); e.hasMoreElements(); ) { String key = (String) e.nextElement(); MyObj elem = tab.get(key); // Torna una copia del valore e non il suo riferimento elem.closeChannel(); } for (Enumeration e = tab.keys(); e.hasMoreElements(); ) { String key = (String) e.nextElement(); MyObj elem = tab.get(key); System.out.println(elem.getName()+" - "+elem.getStr1()); } }
In pratica non ho concluso niente... avete una soluzione??

Rispondi quotando


