Visualizzazione dei risultati da 1 a 7 su 7
  1. #1
    Utente di HTML.it
    Registrato dal
    Sep 2008
    Messaggi
    312

    problea teorico con i thread

    Salve a tutti,
    ho una domanda sui thread non facile da spiegare ma ci provo.
    L'applicazione prevede un server multithreading che ad ogni richiesta del client fa partire un thread che deve cercare dei file contenuti in alcune cartelle e spedirli al client.
    Ho creato un metodo static che fa questa ricerca e restuisce un arraylist cntenente questi file.
    Se faccio in modo che il metodo run() del thread richiama questo metodo che succede?
    Mi spiego meglio...parte il thread 1 questo fa partire il metodo static che istanzia un arrayList, lo riempe con i file di interesse e lo restituisce tramite un return.
    Supponiamo che quando il thread uno è a metà esecuzione parte il thread 2 che richiama sempre questo metodo static.
    il thread 2 usa la stessa arraylist del primo oppure no? Dato che quest'array è creato all'interno del metodo static richiamato da entrambi?
    Perchè potrebbe capitare che l'arraylist è riempita in parte dal primo thread ed in parte dal secondo!

  2. #2
    Utente di HTML.it
    Registrato dal
    Apr 2006
    Messaggi
    55
    Intanto mi pare proprio che nn si possano richiamare metodi statici in altri che non lo sono, ma a parte questo, la tua domanda riguarda i più classici problemi di sincronizzazione.
    Se devi lavorare sullo stesso ArrayList da più thread, dovresti controllare se i metodi di array list sono "Thread safe". Il mio consiglio, in caso contrario, è avere dei metodi apposta per lavorare sull'ArrayList. Dichiara questi metodi come syncronized (spero si scriva così, controlla) e java farà il resto.
    Se invece ti servono ArrayList diversi, puoi creartelo nella funzione run e ne avrai uno su ogni thread e qui nn si pone nessun problema di sincronizzazione!

  3. #3
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284

    Re: problea teorico con i thread

    Originariamente inviato da lio.b
    il thread 1 questo fa partire il metodo static che istanzia un arrayList

    il thread 2 usa la stessa arraylist del primo oppure no? Dato che quest'array è creato all'interno del metodo static richiamato da entrambi?
    Non è la questione se il metodo è static o no .... la questione è: questo ArrayList che istanzi lo referenzi solo con variabili locali? Non c'è nulla di "condiviso", insomma?? Allora non c'è alcun problema.
    Se il metodo non accede ad un qualche "stato" condiviso da più thread, è automaticamente thread-safe.

    Originariamente inviato da Tenebral
    Intanto mi pare proprio che nn si possano richiamare metodi statici in altri che non lo sono
    Invocare un metodo static da un altro non static?? Certo che si può.

    Originariamente inviato da Tenebral
    ma a parte questo, la tua domanda riguarda i più classici problemi di sincronizzazione.
    Se devi lavorare sullo stesso ArrayList da più thread, dovresti controllare se i metodi di array list sono "Thread safe"
    No, ArrayList non è una collezione "synchronized" ovvero non è thread-safe.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  4. #4
    Utente di HTML.it
    Registrato dal
    Apr 2006
    Messaggi
    55

    Re: Re: problea teorico con i thread

    Originariamente inviato da andbin
    Invocare un metodo static da un altro non static?? Certo che si può.
    Mi stavo confondendo col caso contrario! :rollo:

  5. #5
    Utente di HTML.it
    Registrato dal
    Sep 2008
    Messaggi
    312
    Esatto,
    il meccanismo è questo:
    run(){
    search(String a, String b)
    }

    search è un metodo statico che inizia così:
    private static search(String a, String b){
    ArrayList a = new ArrayList();
    //cerca file e li inserisce in a
    .....
    return a;

    Quindi non ci sono problemi?
    Grazie

  6. #6
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da lio.b
    private static search(String a, String b){
    ArrayList a = new ArrayList();
    //cerca file e li inserisce in a
    .....
    return a;

    Quindi non ci sono problemi?
    Se non usi nulla di "condiviso", no ovviamente.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  7. #7
    Utente di HTML.it
    Registrato dal
    Sep 2008
    Messaggi
    312
    Ne ero quasi sicuro ma è sempre meglio un confronto.
    Grazie di tutto

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.