Visualizzazione dei risultati da 1 a 8 su 8

Discussione: Java - problema thread

  1. #1

    Java - problema thread

    Salve, avrei questo strano comportamento: in un sistema cient/server a thread il thread appena creato riesce ad agire su un array inserendo un elemento che però poi non riesce a leggere; la tal cosa riesce a fare invece un secondo nuovo thread che però a sua volta, qualora inserisse un nuovo elemento non sarebbe in grado di vedere e così via.......

    Quale potrebbe essere il problema?
    Grazie.

  2. #2
    Utente di HTML.it L'avatar di Alex'87
    Registrato dal
    Aug 2001
    residenza
    Verona
    Messaggi
    5,802
    Potrebbe essere qualsiasi cosa visto che non hai postato il codice...

    Tra l'altro, cosa vuol dire "inserendo un elemento che però poi non riesce a leggere"?
    SpringSource Certified Spring Professional | Pivotal Certified Enterprise Integration Specialist
    Di questo libro e degli altri (blog personale di recensioni libri) | ​NO M.P. TECNICI

  3. #3
    Inserisco un elemento nell'array, poi però se gli dico di mostrarmene il contenuto non lo vede anche se lo ha appena inserito......

    Mi sono reso conto che questa cosa in realtà è parzialmente superata, nel senso che se dopo aver usato la funzione per mostrare il contenuto dell'array aggiungo di farmi scrivere a video tramite System.out una qualunque cosa, allora per magia mi mostra anche l'elemento aggiunto... come se qualcosa bloccasse la scrittura a video........

  4. #4

    Moderazione

    Le discussioni relative a Java non sono trattate qui, ma nell'apposita sottosezione.

    Provvedo a spostare il thread.
    Amaro C++, il gusto pieno dell'undefined behavior.

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

    Re: Java - problema thread

    Originariamente inviato da java_junior
    Salve, avrei questo strano comportamento: in un sistema cient/server a thread il thread appena creato riesce ad agire su un array inserendo un elemento che però poi non riesce a leggere; la tal cosa riesce a fare invece un secondo nuovo thread che però a sua volta, qualora inserisse un nuovo elemento non sarebbe in grado di vedere e così via.......
    Le questioni sui thread sono spesso molto delicate. In generale, se hai una qualunque struttura dati "mutabile", acceduta da più thread, allora c'è bisogno di una apposita sincronizzazione, fatta o con i lock intrinseci degli oggetti (e la parola chiave synchronized) oppure con la sincronizzazione a più alto livello offerta dalle classi tipo Semaphore, ReentrantLock o le altre (in java.util.concurrent e sottopackage) oppure con l'uso di strutture dati/collezioni già "thread-safe".

    In assenza di una opportuna sincronizzazione, non c'è alcuna garanzia che la modifica alla struttura dati da parte del thread A sia "vista" da un thread B.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  6. #6
    Sì, capisco; il problema però è che il thread A agisce da solo perchè c'è solo lui e nonostante questo non riesce a vedere le modifiche fatte da lui stesso...... o meglio: le modifiche le fa ma richiamando la struttura dati modificata attraverso metodi che ne mostrino la composizione risulta come se nulla fosse successo.

    Semplificando la situazione: il thread A mette una penna in una scatola, poi apre la scatola e la trova vuota; arriva il thread B apre la scatola e trova la penna.......

  7. #7
    Utente di HTML.it L'avatar di Alex'87
    Registrato dal
    Aug 2001
    residenza
    Verona
    Messaggi
    5,802
    Originariamente inviato da java_junior
    Sì, capisco; il problema però è che il thread A agisce da solo perchè c'è solo lui e nonostante questo non riesce a vedere le modifiche fatte da lui stesso...... o meglio: le modifiche le fa ma richiamando la struttura dati modificata attraverso metodi che ne mostrino la composizione risulta come se nulla fosse successo.

    Semplificando la situazione: il thread A mette una penna in una scatola, poi apre la scatola e la trova vuota; arriva il thread B apre la scatola e trova la penna.......
    Ancora: senza vedere il codice non possiamo dirti qual è il problema, si può solo tirare ad indovinare!
    SpringSource Certified Spring Professional | Pivotal Certified Enterprise Integration Specialist
    Di questo libro e degli altri (blog personale di recensioni libri) | ​NO M.P. TECNICI

  8. #8
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,328
    Originariamente inviato da Alex'87
    Ancora: senza vedere il codice non possiamo dirti qual è il problema, si può solo tirare ad indovinare!
    E tirando ad indovinare scommetterei sul fatto che lettura e scrittura avvengono su due array diversi. Ma lo si potrà constatare solo quando l'utente vorrà postare il codice.


    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.