Visualizzazione dei risultati da 1 a 7 su 7

Discussione: Java MultiThreading

  1. #1

    Java MultiThreading

    Ciao a tutti,
    devo realizzare un un sistema multi thread del seguente genere ma nn so bene come procedere..
    Ogni suggerimento o aiuto sarebbe preziosissimo

    Ho un tread che deve servire delle richieste provenienti da altri n threads
    ovvero

    1 Thread Gestore
    N Thread richiedenti che generano richieste

    Quando il Gestore non ha richieste, resta passivo ad attendere.. Quando gli arriva una richiesta si deve attivare e servire tale richiesta.
    Se arriva una richiesta mentre il gestore è già impegnato, il richiedente deve essere messo in una coda di attesa.
    Non appena il Gestore ha terminato con la precedente richiesta, deve controllare il valore della richieste dei threads in coda di attesa e sceglierne uno in base ad un determinato criterio.

    le richieste devono arrivare al Gestore attraverso un suo metodo pubblico tipo :

    codice:
    public void richiesta(int numero)
    Il tutto si potrebbe tradurre nel classico modello del barbiere che dorme ma il mio problema è capire come accodare i threads dormienti e recuperare i valori delle loro singole richieste per poi confrontarli con un determinato valore fisso.

    Grazie a tutti

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

    Re: Java MultiThreading

    Originariamente inviato da romeombo
    Ho un tread che deve servire delle richieste provenienti da altri n threads
    ovvero

    1 Thread Gestore
    N Thread richiedenti che generano richieste

    Quando il Gestore non ha richieste, resta passivo ad attendere.. Quando gli arriva una richiesta si deve attivare e servire tale richiesta.
    Se arriva una richiesta mentre il gestore è già impegnato, il richiedente deve essere messo in una coda di attesa.
    Non appena il Gestore ha terminato con la precedente richiesta, deve controllare il valore della richieste dei threads in coda di attesa e sceglierne uno in base ad un determinato criterio.

    le richieste devono arrivare al Gestore attraverso un suo metodo pubblico tipo :

    codice:
    public void richiesta(int numero)
    Quindi i richiedenti hanno tutti un reference all'oggetto Gestore e invocano su di esso richiesta(int) ed è poi quest'ultimo che deve mettere in coda le richieste? (e chiaramente Gestore deve anche gestire un thread a sé stante per leggere e gestire le richieste in modo asincrono rispetto ai richiedenti)

    Ok. Ma ..... domandona: cosa conosci del multi-threading in Java, l'uso degli "intrinsic lock", l'uso delle "intrinsic queue" tramite i wait()/notify() ed eventualmente l'uso delle collezioni "concurrent" disponibili da Java 5 nel package java.util.concurrent?
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    Sì esatto i richiedenti hanno tutti un reference all'istanza del Thread Gestore.
    Il loro costruttore è qualcosa tipo

    codice:
    Richiedente(Gestore gest)
    Sto cercando di implementare il tutto con le primitive di java e quindi con i ReentrantLock e le Condition senza far uso del Synchronized

    Il mio dilemma è come riuscire a mettere sti benedetti Threads richiedenti in coda e poi risvegliare quello che interessa a me in base alla sua precedente richiesta.
    Se il Gestore viene contattato solo attraverso il suo metodo

    codice:
    public void richiesta(int numero)
    come faccio poi a ricordarmi la richiesta che il thread richiedente aveva con se ??

    Per metterli in coda ho pensato ad una semplice LinkedList ed con l'await su un condition metto i threads a nanna. però poi ?

    Grazie

  4. #4
    nessun suggerimento in merito ??
    help

    Grazie !

  5. #5
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da romeombo
    Sto cercando di implementare il tutto con le primitive di java e quindi con i ReentrantLock e le Condition senza far uso del Synchronized
    Lock/Condition di java.util.concurrent.locks non sono "primitive" di Java ... sono sì l'equivalente a livello concettuale degli intrinsic lock e condition queue degli oggetti ma sono ad "alto livello", vengono detti "espliciti".

    Originariamente inviato da romeombo
    Per metterli in coda ho pensato ad una semplice LinkedList ed con l'await su un condition metto i threads a nanna. però poi ?
    Se vuoi fare innanzitutto una tua classe che gestisce una lista linkata sincronizzata e "bloccante", quindi che incapsula sia la gestione di un LinkedList che tutta la logica di sincronizzazione e con comportamento bloccante .... si può benissimo fare.

    Quali sono i dubbi a riguardo?
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  6. #6
    ripeto, il mio dubbio è capire qual'è il modo migliore per ricordare il valore della richiesta passato come parametro al metodo richiesta e associralo al Thread accodato....

    codice:
    public void richiesta(int numero)

    usare un'array per memorizzare le richieste ed una linkedlist per i thread bloccati ???


    Lock/Condition di java.util.concurrent.locks non sono "primitive" di Java ... sono sì l'equivalente a livello concettuale degli intrinsic lock e condition queue degli oggetti ma sono ad "alto livello", vengono detti "espliciti".
    sapresti dirmi quali sono le primitive di sincronizzazione ??

    Grazie molto gentile !

  7. #7
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da romeombo
    il mio dubbio è capire qual'è il modo migliore per ricordare il valore della richiesta passato come parametro al metodo richiesta e associralo al Thread accodato....

    codice:
    public void richiesta(int numero)
    Il numero ce l'hai. Quando è in esecuzione richiesta() chiaramente sei nel contesto del thread che l'ha invocato, anche questo puoi saperlo: Thread.currentThread().

    Originariamente inviato da romeombo
    usare un'array per memorizzare le richieste ed una linkedlist per i thread bloccati ???
    Dovrei rileggermi bene questa discussione, perché sinceramente non ho ancora ben capito cosa vuoi fare con i thread e con quel 'numero'.

    Originariamente inviato da romeombo
    sapresti dirmi quali sono le primitive di sincronizzazione ??
    La parola chiave synchronized e i metodi wait/notify/notifyAll di Object.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

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.