Visualizzazione dei risultati da 1 a 5 su 5

Discussione: Thread e timeout

  1. #1

    Thread e timeout

    Ciao,
    ho una problematica con i thread.
    Nella mia applicazione vengono lanciati 2 Thread che interrogano due url diverse e devono restituire il risultato all'applicazione principale. Questa andrà a unire i due risultati in uno unico. Devo però gestire anche il timeout delle connessioni, superato il timeout della connessione il thread deve restituire un null.
    Qualcuno conosce qualche caratteristica dei Thread in java che mi permette di implementare questa funzionalità?

    Grazie
    °°Mikmontana°°

  2. #2
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,328
    Non è una peculiarità dei thread. E' parte della tua logica di programma.

    Non sappiamo nulla di come effettui la connessione alle URL, ma immagino che utilizzerai una URLConnection. Tale oggetto prevede i metodi setConnectTimeout()/setReadTimeout() con i quali è possibile specificare un timeout in millisecondi per la connessione/lettura dalla risorsa. Se viene specificato un valore diverso da zero, quello sarà il numero di millisecondi che la connessione/lettura attenderà prima di arrabbiarsi. Se la connessione riesce/arrivano dei dati da leggere entro quel numero di millisecondi, ok; altrimenti verrà sollevata una SocketTimeoutException.

    Il tuo thread dovrà usare questa tecnica per ottenere i dati dalla URLConnection. Se li ottiene, bene; altrimenti il thread terminerà senza aver valorizzato i dati (che saranno, quindi, null).

    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  3. #3
    Mi sa che mi sono spiegato male...
    La logica da implementare nei thread la conosco, ma non so come dire all'applicazione principale di fermarsi fino a quando i thread non hanno finito l'esecuzione. Non esiste qualcosa tipo "aspetta fino a che...."?
    °°Mikmontana°°

  4. #4
    Utente di HTML.it
    Registrato dal
    Mar 2012
    Messaggi
    28
    Se devi mettere in sleep l'applicazione principale fino a quando il thread non ha finito allora che senso ha utilizzare un thread?? Fai l'operazione di connessione in una funzione, così appena questa ritorna l'applicazione principale continua...

  5. #5
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,328
    Originariamente inviato da javatore
    Se devi mettere in sleep l'applicazione principale fino a quando il thread non ha finito allora che senso ha utilizzare un thread?? Fai l'operazione di connessione in una funzione, così appena questa ritorna l'applicazione principale continua...
    Beh, magari ha la necessità di eseguire più processi in parallelo e attendere che tutti abbiano concluso. Si fa in questo modo:

    codice:
    // Creo un array con tutti i thread da lanciare
    Thread[] elencoThread = new Thread[NUM_THREAD];
    
    // Creo ciascun thread e lo eseguo
    for(int i=0; i<NUM_THREAD; i++) {
       elencoThread[i] = new TuoThread( ... );
       elencoThread[i].start();
    }
    
    // Attendo che tutti abbiano finito
    for(Thread t : elencoThread) t.join();
    Ciascuna chiamata a join() farà sì che il thread corrente (quello principale) attenda il completamento del thread su cui il metodo è stato invocato. Se il thread è già terminato, la chiamata termina immediatamente e si passa al prossimo.

    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

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.