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

    Variabile statica condivisa tra threads

    Salve a tutti,
    ho 4 threads che svolgono tutti lo stesso lavoro
    questo lavoro deve essere compiuto fino al verificarsi di una condizione
    per questo motivo il metodo che implmenta il lavoro che deve fare ogni thread presenta un enorme while(cond) che viene eseguito fino al quando la condizione nn è verificata.
    come devo fare per far condividere la variaile tra tutti i threads???
    io l'ho fatto dichiarandola così

    public static boolean fine=true;
    ovvero come variabile globale.
    Le altrew variabili globali, invece, le ho definite senza il predicato static...
    sto sbagliando qualcosa?

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

    Re: Variabile statica condivisa tra threads

    Originariamente inviato da dekorus
    come devo fare per far condividere la variaile tra tutti i threads???
    io l'ho fatto dichiarandola così

    public static boolean fine=true;
    ovvero come variabile globale.
    Marcala come "volatile". Questo garantisce la "visibilità" della modifica a tutti i thread che la leggono.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    prima di tutto grazie per la risposta
    ho fatto un giretto breve e delle prove e mi sono accorto che se levo il modificatore static il "volatile" da solo non funziona

    mi devo preoccupare?

  4. #4
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da dekorus
    ho fatto un giretto breve e delle prove e mi sono accorto che se levo il modificatore static il "volatile" da solo non funziona
    Se togli static la variabile diventa "di istanza". Ovvero ogni istanza della tua classe ha una sua variabile 'fine' boolean.
    E ovviamente non puoi più fare NomeTuaClasse.fine per referenziarla!!!
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  5. #5
    ah, quindi static devo lasciarlo?

  6. #6
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da dekorus
    ah, quindi static devo lasciarlo?
    Beh ma dipende da cosa vuoi fare. Conosci la differenza tra membri "di classe" e membri "di istanza"??? Perché è una questione basilare ....
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  7. #7
    se non ho capito male
    se metto static è variabile di classe è quindi dovrebbe essere condivisa tra tutte le istanze
    altrimenti ogni istanza ha la propria variabile indipendente

    mi sbaglio?

  8. #8
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da dekorus
    se metto static è variabile di classe è quindi dovrebbe essere condivisa tra tutte le istanze
    Sì, ce n'è 1 sola di variabile ... non è associata ad alcuna istanza della classe.

    Originariamente inviato da dekorus
    altrimenti ogni istanza ha la propria variabile indipendente
    Esatto.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  9. #9
    quindi se una varibile booleana cond deve essere la stessa per tutti i threads in modo che se una la mette a false tutti se ne accorgono e terminano lo static ce lo devo mettere per forza...giusto?

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.