Visualizzazione dei risultati da 1 a 10 su 22

Hybrid View

  1. #1
    Ciao AndBin, il mio errore era proprio quello!!

    Ti devo chiedere un altro piacere!

    Como posso mettere questi thread in una coda FIFO? quello che voglio fare e rispettare l'ordine d'arrivo

    Mi potresti gentilmente aiutare


    Grazie
    Il primo social network dedicato interamente allo sport.
    Social Network
    ________________________________

  2. #2
    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
    Como posso mettere questi thread in una coda FIFO? quello che voglio fare e rispettare l'ordine d'arrivo
    Se intendi dire che l'ordine di uscita delle auto deve tassativamente rispettare l'ordine di entrata, allora serve un coordinamento ben preciso tra i thread. In sostanza vuol dire che anche dentro il esci() ci deve essere una logica di wait: se un thread (=auto) arriva a fare il esci() ma NON è il suo turno, allora deve stare in wait, finché non viene svegliato E è il suo turno di uscita.

    Quindi alla fine la questione è di stabilire come determinare e gestire il turno delle auto. Si può fare in diversi modi e dipende anche da come hai strutturato le cose.

    Purtroppo non ho molto tempo in questo momento. Ti suggerisco di leggere una discussione che avevo seguito tempo fa su un altro forum: http://www.iprogrammatori.it/forum-p...ad-t25343.html
    In particolare poi verso la fine qui un mio esempio con spiegazione.
    L'obiettivo era un po' differente dal tuo ma il concetto è similare. Se comprendi quell'esempio potresti quasi sicuramente riuscire a comprendere come fare quello che chiedi.

    Come al solito, per qualunque dubbio chiedi pure qui, continuerò a monitorare questa discussione.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    AndBin, una domanda non si puo utilizzare un arraylist?

    Ti invio il codice senza coda FIFO

    public class Inizio {

    public static void main(String[] args){
    Prova xx = new Prova();

    Sincronizzazione th1 = new Sincronizzazione(1,xx);
    Thread thp1 = new Thread(th1);
    thp1.start();

    Sincronizzazione th2 = new Sincronizzazione(2,xx);
    Thread thp2 = new Thread(th2);
    thp2.start();

    Sincronizzazione th3 = new Sincronizzazione(3,xx);
    Thread thp3 = new Thread(th3);
    thp3.start();

    Sincronizzazione th4 = new Sincronizzazione(4,xx);
    Thread thp4 = new Thread(th4);
    thp4.start();

    }
    }
    Il primo social network dedicato interamente allo sport.
    Social Network
    ________________________________

  4. #4
    Oggetto condiviso!!!

    public class Prova extends Thread{

    private static Integer auto=0;

    public synchronized void entraNelParcheggio() throws InterruptedException{
    while (auto>=2){
    wait();
    }
    auto++;
    }

    public synchronized void esconoDalPacheggio(int esci){
    auto--;
    System.out.println("Sono uscito auto: "+esci);
    notifyAll();
    }
    }
    Il primo social network dedicato interamente allo sport.
    Social Network
    ________________________________

  5. #5
    Thread!!

    public class Sincronizzazione implements Runnable {



    private Prova miaProva;

    static int tMin = 3000;
    static int tMax = 6000;

    //Identificato auto
    int idAuto;

    public Sincronizzazione(int idAuto,Prova Variabile){
    System.out.println("Sono vivo auto: "+idAuto);
    miaProva=Variabile;
    this.idAuto = idAuto;

    }

    @Override
    public void run() {

    try {
    miaProva.entraNelParcheggio();
    } catch (InterruptedException e1) {
    // TODO Auto-generated catch block
    e1.printStackTrace();
    }



    int tRandom = (int) Math.floor(Math.random() * tMax) + tMin;
    System.out.println("Sono entrato auto: "+idAuto+" per tempo: "+tRandom);
    try {
    Thread.sleep(tRandom);
    } catch (InterruptedException e) {
    e.printStackTrace(); //To change body of catch statement use File | Settings | File Templates.
    }


    miaProva.esconoDalPacheggio(idAuto);

    }

    }


    Quello che vorrei fare, come hai detto tu, le macchina devono rispettare l'ordine d'ingresso.

    Pero' mi piacerebbe usare un arraylist.

    Quando hai tempo mi potresti inviare un esempio di codice

    Grazie mille
    Il primo social network dedicato interamente allo sport.
    Social Network
    ________________________________

  6. #6
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Ho letto brevemente e vagamente il codice ma così NON va bene già a partire dalle denominazioni: Prova e Sincronizzazione non vanno granché bene come nomi, nel senso che dicono molto molto poco. Inoltre la classe dell'oggetto condiviso non ha senso che estenda Thread.

    Ripensa un attimo le classi, suggerisco es. Parcheggio (per l'oggetto condiviso) e Auto o AutoRunnable (per il Runnable da passare ad un Thread, gli oggetti Thread li crei poi al volo).

    Quote Originariamente inviata da andgio76 Visualizza il messaggio
    una domanda non si puo utilizzare un arraylist?
    Se vuoi basarti solo sul idAuto (ovvero auto id=1 ha precedenza prima del 2, ecc... o il contrario ... come vuoi), allora non serve una collezione.
    Se invece vuoi che il primo thread (=auto) che arriva al entraNelParcheggio() sia anche la prima ad uscire, allora sì, una collezione (ArrayList ok ma anche LinkedList è ok) è utile per tenere i riferimenti agli oggetti Thread.
    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 © 2026 vBulletin Solutions, Inc. All rights reserved.