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

    [Thread]Problema con sincronizzazione

    Ciao Ragazzi sto provando a vedere la sincronizazione in Java con i thread; ho creato il seguente codice pero non riesco a capire perchè una volta che il thread viene messo in wait non riparte anche se ho utilizzato notifyall()

    Chiedo aiuto a tutti voi, non so piu cosa fare!!!

    La prima serie di numeri (da 0 a 9 ) me le stampa invece la seconda serie NO!!
    codice:
    Classe main()
           int[] a = new int[1]; // variabilie condivisa
           a[0]=1;
                    thre xx=new thre(a);
                    xx.start();
                    thre zz=new thre(a);
                    zz.start();
    __________________________________________________ ___
    Classe che eredita da thread
    codice:
    public class thre extends Thread{
    int[]a=null;
    public thre(int[] variabilie) {
            super();
            a = variabilie;
        }
    
        @Override
        public void run() {
            // TODO Auto-generated method stub
            super.run();
            try {
                
                this.conta();
            } catch (InterruptedException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
        public synchronized  void conta() throws InterruptedException{
            int i;
            while (a[0] == 0) {
                try {
                wait();
                } catch (InterruptedException e) {}
                }
            a[0]=0;
            for(i=0;i<10;i++){
                System.out.print(i + "-") ;
                Thread.sleep(1000);
            }
            a[0]=1;
            notifyAll();
        }
    
    }
    Ultima modifica di MItaly; 06-05-2014 a 23:50 Motivo: tag CODE
    Il primo social network dedicato interamente allo sport.
    Social Network
    ________________________________

  2. #2
    Probabilmente mi manca qualche passaggio! pero non riesco proprio a capire perchè!
    Il primo social network dedicato interamente allo sport.
    Social Network
    ________________________________

  3. #3
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da andgio76 Visualizza il messaggio
    ho creato il seguente codice pero non riesco a capire perchè una volta che il thread viene messo in wait non riparte anche se ho utilizzato notifyall()
    synchronized è sul metodo conta, che è di "istanza". Pertanto il lock è sull'oggetto su cui è invocato conta, ovvero la istanza di thre.

    Dal momento che hai 2 istanze di thre create nel main, ciascuna ha il suo proprio oggetto di lock, che è la istanza stessa.

    Lock differenti = nessun contendimento del lock = nessuna sincronizzazione e nessuna attesa/notifica tra i due thread.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  4. #4

    Moderazione

    Il codice va specificato tra tag [CODE] ... [/CODE], altrimenti perde l'indentazione e l'evidenziazione della sintassi. Ora correggo io, in futuro ricordatene.
    Amaro C++, il gusto pieno dell'undefined behavior.

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.