Visualizzazione dei risultati da 1 a 6 su 6

Discussione: Java Concorrente

  1. #1
    Utente di HTML.it
    Registrato dal
    Jul 2007
    Messaggi
    24

    Java Concorrente

    Salve
    sto lavorando ad un progetto universitario che devo consegnare i primi di settembre ma sono da un giorno fermo su un errore, Mi date una mano.

    Le specifiche del progetto sono queste.

    codice:
    Si realizzi una classe BufferLimitato che implementi un buffer FIFO a dimensione prefissata accessibile
    da piu' thread.
    La classe deve avere un costruttore che prende come parametro la dimensione del buffer.
    L'accesso al buffer (ai metodi che modificano il buffer) deve avvenire in mutua esclusione.
    La classe deve fornire i metodi:
            public void inserisci(Object) throws InterruptedException
         ●
            che inserisce un elemento nel buffer eventualmente bloccando il thread chiamante finché il
            buffer e' pieno.
            public Object rimuovi( ) throws InterruptedException
         ●
            che rimuove un elemento dal buffer (secondo la logica FIFO) eventualmente bloccando il
            chiamante finché il buffer e' vuoto
    Le segnature dei metodi possono essere estese, ad esempio con la keyword synchronized o con
    l’aggiunta di altre eccezioni, ma non possono essere rimosse le parti fornite da noi. La classe può avere
    altri metodi.
    Si dovrà fare uso di costrutti di sincronizzazione wait/notify, e qualsiasi costrutto di sincronizzazione
    che non sia synchronized o wait/notify dovrà essere implementato dallo studente (ad es. i semafori). Si
    potrà fare uso delle strutture dati messe a disposizione da Java (ad esempio la classe java.util.Vector),
    ma non della loro versione sincronizzata. Particolare attenzione dovrà essere dedicata alla gestione delle
    eccezioni.
    Si dovrà tenere traccia di tutti i thread in esecuzione (memorizzandoli ad es. in una struttura dati) e
    assicurandosi che l'applicazione termini solo dopo che tutti i thread sono terminati (utilizzando join).
    Non e' permesso uscire dall'applicazione utilizzando una System.exit.
    Il codice Java dovrà essere commentato e dovrà essere accompagnato da una breve relazione con la
    descrizione delle scelte implementative adottate.
    Si dovranno presentare delle classi che testano le soluzioni prodotte (le classi che implementano tali test
    vanno specificate chiaramente nella relazione) ed, implementare dei thread che usano il suddetto buffer
    inserendo e rimuovendo elementi.
    Sulla parte dove bisogna tenere traccia di tutti i Thread non ho ancora lavorato per ora sto lavorando sulle classi che testano le soluzioni prodotte .....
    In Pratica ho creato la classe BufferLimitato
    codice:
    public class BoundedBufferSynchronized{
    
        private int in; // points to the next free position
        private int out; // points to the next full position
        private int count;
        private Object[] buffer;
        
        public BoundedBufferSynchronized(int size){
            in = 0;
            out = 0;
            count = 0;
            buffer = new Object[size];
        }
        
        public synchronized void insert(Object item){
          
        }
        
        public synchronized Object remove(){
           
        }
        
        private boolean isEmpty(){
            return count == 0;
        }
    
        private boolean isFull(){
            return count == buffer.length;
        }
    }
    Ho creato il MainStart

    codice:
    package santoro;
    
    public class Start {
    
    	
    	public static void main(String[] args) throws InterruptedException {
    		
    		OggettoDaCaricare Oget = new OggettoDaCaricare(); 
    		BufferLimitato BufferLimit = new BufferLimitato(100);
    		ThreadInsert Thread1 = new ThreadInsert("Roby");
    		Thread1.start();
    	}
    
    }
    :master: e gia qui iniziano i problemi.. In Eclipse BufferLimit Viene sottolineato e non capisco perché.!? Stesso problema con Oget....
    Poi ho creato la classe
    codice:
    package santoro;
    
    public class ThreadInsert extends Thread {
    	
    	
    	ThreadInsert(){
    		super( "name" );
    	}
    
    
    	ThreadInsert(String name){
    		super( name );
    	}
    	public void run(){
    		System.err.println(getName()+ " E' Partito");
    		
    		BufferLimit.insert(Oget);
    	}
    
    }
    E mi da errore su BufferLimit ... Perche?
    Nel metodo Run Non posso invocare il metodo in un altro oggetto! in questo caso Nel Run di ThreadInsert Non posso invocare un metodo di BufferLimitato? BufferLimit.insert(Oget)? Oget è un oggetto che non fa nulla...

    Accetto ogni consiglio.

  2. #2
    Utente di HTML.it
    Registrato dal
    Apr 2007
    Messaggi
    906
    Le classi BufferLimitato e OggettoDaCaricare dove sono? Nel package standard di java non esistono, se non l'hai scritte tu, non lepuoi utilizzare. Se l'hai scritte, ma sono in un package diverso le devi importare. Poi ti conviene riportare anche il messaggio di errore.
    Poi le classi non sono omniscenti, non e' che tu puoi istanziare un oggetto in una classe e pretendere di usarlo in un'altra senza passarlo.

  3. #3
    Utente di HTML.it
    Registrato dal
    Jul 2007
    Messaggi
    24
    Le classi sono tutti in un pacchetto che ho creato io
    codice:
    package santoro;
    Se serve posso postare l'intero pacchetto contenete il codice....

    Comunque nella classe start eclipse sottolinea in giallo bufferLimit e oget il che non è buono.....
    Se premo F2 dice
    codice:
    The local variable bufferLimit is never read
    Se compilo mi dici

    codice:
    Exception in thread "Roby" java.lang.Error: Unresolved compilation problems: 
    	BufferLimit cannot be resolved
    	Oget cannot be resolved
    
    	at santoro.ThreadInsert.run(ThreadInsert.java:17)

  4. #4
    Utente di HTML.it
    Registrato dal
    Jul 2007
    Messaggi
    24
    :master:

    Forse ho strutturato male il mio progetto!!

    In pratica ho questo BufferLimitato! ora vorrei creare dei Thread che inseriscono e tolgono elementi dal Buffer.

  5. #5
    Utente di HTML.it
    Registrato dal
    Apr 2007
    Messaggi
    906
    La sottolinaetura gialla e' uno warning, non pregiudica la compilazione. Come hai visto t'informa soltanto che le variabili non vengono mai usate e quindi potrebbero essere superflue.
    Oggetti che DEVI passare al thread, altrimenti non puoi usarli all'interno dello stesso.
    La cosa piu' semplice e' passare gli oggetti che userai nel run al thread via costruttore.

  6. #6
    Utente di HTML.it
    Registrato dal
    Jul 2007
    Messaggi
    24
    ok!

    Grazie del consiglio..

    Ora provo

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.