Visualizzazione dei risultati da 1 a 5 su 5
  1. #1

    Problema pool di Thread!

    Ciao a tutti! Ho creato una classe, nella quale eseguo un ping per sapere se il pc è in rete oppure no. Quello che vorrei fare è creare un pool di thread per far partire in contemporanea n ping e permettere di mappare la mia rete aziendale in maniera rapida. La classe che implementa runnable e che esegue il ping è in breve così composta :

    public class info(){
    String ip;

    public info(ip){

    this.ip=ip;
    }
    ...
    ...

    public run(){

    process p = Runtime.getRuntime.exec("ping "+ip);
    }

    }

    In un altra classe creo 255 oggetti della classe info, chiaramente correttamente inizializzati coi i 255 indirizzi che voglio mappare ( 10.10.10.[0]-[255]) e ho un metodo che è qui descritto :

    public void eseguiThread(){

    ...
    ...

    pool=Executors.newFixedThreadPool(NumeroMAXThread) ;
    for(int i=0;i<255;i++){

    pool.execute(info[i]);

    }

    pool.shutdown();
    }

    Ora quando lancio questo metodo nel main, a volte mi fa correttamente i 255 ping, altre volte, a sua discrezione, 254 o 253. Sembra quasi che il pool non aspetti la terminazione di tutti i ping e che termini prima. Come posso fare per risolvere?

  2. #2
    Utente di HTML.it
    Registrato dal
    Jan 2006
    Messaggi
    127
    mi verrebbe in mente una comunicazione tra i 255 thread ed il processo principale.

    del tipo:

    processo pool

    lancia i thread

    aspetta conferma dai 255 thread

    terminazione pool

    processo thread

    esegui ping

    invia conferma azione eseguita
    termina thread

  3. #3
    Si, effettivamente ho provato a mettere in sleep il main(da dove lancio tutti quei thread) per 10 minuti (un tempo sufficiente a far finire tutti i ping) e funziona. Con molta probabilità accade che il main termini prima degli altri processi e "qualcosa vada storto". Questa mia soluzione tuttavia mi fa altamente schifo! .... come posso fare ad implementare la tua ? (cioè quando i 255 processi che eseguono il ping terminano lo notificano al main?). hai qualche idea in particolare? ho provato con una variabile statica aggiornata da ogni thread che parte attraverso un metodo synchronized per tenerne il conto, ma non funziona. In ogni caso grazie mille per la risposta.

  4. #4
    Utente di HTML.it
    Registrato dal
    Jan 2006
    Messaggi
    127
    beh è una soluzione, xkè non funziona ??

    ovvio che dovresti collegare questa cosa ad un tempo di attesa.

    il main attende che ad esempio questa variabile arriva a 255, ma può essere che alcuni thread si blocchino e quindi la soglia nn venga mai raggiunta.

    allora per evitare un attesa infinita, forza l'uscita dopo un tot di secondi.

  5. #5
    Ok, ci provo, dopo di che faccio sapere. grazie

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.