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:
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());
    }
}
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....

In pratica non ho concluso niente... avete una soluzione??