Visualizzazione dei risultati da 1 a 4 su 4
  1. #1
    Utente di HTML.it
    Registrato dal
    Feb 2011
    Messaggi
    339

    Esecuzione delle istruzioni nel main

    Ciao a tutti.

    Ho un dubbio riguardo a come vengono eseguite le istruzioni nel metodo main.

    Supponiamo che io abbia una classe Client che fa partire un thread (chiamato attendi) dove c'è una chiamata bloccante , per esempio un metodo receive() che attende un pacchetto in multicast.

    Supponiamo inoltre che la classe Client disponga di un metodo (chiamiamolo effettuaRichiesta) che effettua una richiesta ad un Host , tramite l'uso di socket , per ricevere una chiave di cifratura.

    Se nel main io scrivo cosi :
    codice:
    public static void main(String [] args){
    
    //parametri
    
    Client client = new Client(...)  //i puntini stanno ad indicare dei parametri
    client.effettuaRichiesta();
    
    }
    Il metodo effettuaRichiesta viene eseguito dopo che il thread "attendi" ha ricevuto il pacchetto?

  2. #2
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320
    Se la classe Client fa partire un thread, questo lavorerà "in parallelo". Il metodo "start()" della classe Thread, infatti, ritorna immediatamente e l'esecuzione continua senza attese (indipendentementa da quello che viene fatto nel thread).

    Quindi, la risposta è no: non hai nessuna garanzia del fatto che il metodo effettuaRichiesta() venga eseguito prima o dopo che il thread "attenti" ha ricevuto il pacchetto, poichè le due operazioni vengono eseguite in parallelo da due thread differenti (il thread "attenti" ed il main-thread).


    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
    Utente di HTML.it
    Registrato dal
    Feb 2011
    Messaggi
    339
    Ok grazie.

  4. #4
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da Markus85 Visualizza il messaggio
    Il metodo effettuaRichiesta viene eseguito dopo che il thread "attendi" ha ricevuto il pacchetto?
    Se il costruttore di Client fa solo che creare un Thread e avviarlo, quindi in pratica ritorna subito, allora senza alcuna tua apposita sincronizzazione la effettuaRichiesta() potrebbe anche essere invocata prima che il run() inizi addirittura l'esecuzione!

    Quindi, la risposta è no.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

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.