Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Motorola razr fold, dalla conchiglia al formato a libro. La recensione
Motorola razr fold, dalla conchiglia al formato a libro. La recensione
Abbiamo provato Motorola razr fold, il pieghevole a libro con display interno LTPO da 8,09 pollici, Snapdragon 8 Gen 5 e batteria da 6000 mAh in 243 grammi. Pennino e custodia sopno già nella confezione, per un foldable che si caratterizza per il pannello luminoso, l'autonomia ottima per la categoria e le fotocamere coerenti e ben sfruttabili. Il listino è di 1999 euro, ma in vendita si trova già a molto meno
Recensione Google Pixel Watch 5: sembra lo stesso, ma al polso la differenza si sente
Recensione Google Pixel Watch 5: sembra lo stesso, ma al polso la differenza si sente
Google Pixel Watch 5 ha affinato una formula già convincente con hardware più veloce, Gemini offline e nuovi strumenti per sport e benessere. Abbiamo provato la versione LTE da 41 mm, comoda anche di notte e ben proporzionata sui polsi piccoli. Il design resta un punto di forza, ma l'autonomia premia ancora il 45 mm e alcune funzioni AI non sono disponibili in Italia: ecco che cosa cambia rispetto a Watch 4 e quale formato conviene scegliere oggi
Nokia Innovation Day 2026: la sovranità europea passa dal mercato unico e dai laboratori italiani del gruppo
Nokia Innovation Day 2026: la sovranità europea passa dal mercato unico e dai laboratori italiani del gruppo
Politica, accademia e industria a confronto su mercato unico, sicurezza e competitività. Nei laboratori di Vimercate, Nokia ha mostrato le nuove generazioni di chip ottici e i test che ogni prodotto deve superare prima di arrivare sul mercato
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 11-01-2009, 14:51   #1
IAmZak
Senior Member
 
Iscritto dal: Oct 2005
Messaggi: 654
[Java - Java Thread] help attendere gli utenti

ciao ragazzi...
vi spiego la situazione:
nel mio main vengono creati 5 giocatori (tramite un for che rifà a Giocatori.java).... e vengono creati giusti e tutto ok.
dopo ogni start(), c'è anche un metodo chiamato giocatoriPronti, che si incrementa. Quindi 5 giocatori, giocatoriPronti=5.
Codice:
Giocatore[] giocatore = new Giocatore[5];
for (int i=0; i<5; i++){
     giocatore[i]=new Giocatore(i,tavolo);
     System.out.println("Giocatore "+i+" creato");
     giocatore[i].start();
     tavolo.giocatoriPronti();
     System.out.println("Giocatore "+i+" lanciato");
tavolo è un .java pieno di metodi.

Ora, ho un .java chiamato Arbitro, che prima di fare qualunque cosa, controlla che vi siano gli utenti...
Codice:
	public void attendiGiocatori(){
        synchronized(syncGiocatoriPronti){
            while(tavolo.getGiocatoriPronti()<5){
	            System.out.println("NO "+tavolo.giocatoriPronti);
                try{
                    syncGiocatoriPronti.wait();
                }
                catch (InterruptedException e){
                    e.printStackTrace();
                }
            }
            System.out.println("SI "+tavolo.giocatoriPronti);
        }
        }
getGiocatoriPronti è semplicemente un metodo che dà un return della variabile giocatoriPronti (che come spiegato prima diventa 5, incrementandosi).


ma.............. il tutto non funziona. quando lancio dal prompt, rimane tutto in attesa, come se Arbitro non rilevasse che ci sono 5 giocatori, e quindi rimane in wait..............

mi sapete aiutare???
__________________
Macbook Pro 15'' Mid 2015
IAmZak è offline   Rispondi citando il messaggio o parte di esso
Old 11-01-2009, 15:26   #2
Don[ITA]
Senior Member
 
L'Avatar di Don[ITA]
 
Iscritto dal: Jul 2006
Città: Bergamo
Messaggi: 401
Serve più codice per capire dove si incasinano i thread.
Chi chiama il metodo attendiGiocatori()?

Saluti
__________________
iMac 27" 5K
Don[ITA] è offline   Rispondi citando il messaggio o parte di esso
Old 11-01-2009, 15:32   #3
IAmZak
Senior Member
 
Iscritto dal: Oct 2005
Messaggi: 654
Quote:
Originariamente inviato da Don[ITA] Guarda i messaggi
Chi chiama il metodo attendiGiocatori()?

Saluti
lo chiama Arbitro.java
__________________
Macbook Pro 15'' Mid 2015
IAmZak è offline   Rispondi citando il messaggio o parte di esso
Old 11-01-2009, 16:39   #4
Don[ITA]
Senior Member
 
L'Avatar di Don[ITA]
 
Iscritto dal: Jul 2006
Città: Bergamo
Messaggi: 401
Lo chiama solo lui?
Se si non dovrebbe servire quel synchronized
Se puoi posta l'intero codice così riusciamo ad aiutarti

Saluti
__________________
iMac 27" 5K
Don[ITA] è offline   Rispondi citando il messaggio o parte di esso
Old 11-01-2009, 19:11   #5
IAmZak
Senior Member
 
Iscritto dal: Oct 2005
Messaggi: 654
io lo posto anche. è tanto, ma va beh eheheh
tolgo un pò di roba che non serve di sicuro.
Main
Codice:
public class Main{
	public static void main(String[] args){		
        Tavolo tavolo = new Tavolo();
        Arbitro arbitro = new Arbitro(tavolo);
        System.out.println("Arbitro creato");
        arbitro.start();
        System.out.println("Arbitro lanciato");
        Giocatore[] giocatore = new Giocatore[5];
        for (int i=0; i<5; i++){
        	giocatore[i]=new Giocatore(i,tavolo);
            System.out.println("Giocatore "+i+" creato");
			giocatore[i].start();
			tavolo.giocatoriPronti();
			System.out.println("Giocatore "+i+" lanciato");

		}
		try{
			arbitro.join();
		}
		catch(Exception e){
			System.out.println("ERRORE JOIN MAIN: "+e);
		}
    }
}
Arbitro
Codice:
public class Arbitro extends Thread{
	private Tavolo tavolo;
	private Object syncGiocatoriPronti;
	private long orologio=System.currentTimeMillis();
	
	public Arbitro(Tavolo t) {
		super("Arbitro");
		tavolo = t;
		syncGiocatoriPronti=new Object();
	}
	
	public void run(){
		attendiGiocatori();
		System.out.println("Benvenuti a tutti!!!");
-----------qua ho tolto codice che non centra-----------
        }

	public void attendiGiocatori(){
        synchronized(syncGiocatoriPronti){
            while(tavolo.getGiocatoriPronti()<5){
	            System.out.println("NO "+tavolo.giocatoriPronti);
                try{
                    syncGiocatoriPronti.wait();
                }
                catch (InterruptedException e){
                    e.printStackTrace();
                }
            }
            System.out.println("SI "+tavolo.giocatoriPronti);
        }
	}
}
questi sono i metodi chiamati
Codice:
int giocatoriPronti=0;
-----------qua ho tolto codice che non centra-----------
synchronized public void giocatoriPronti(){
        giocatoriPronti++;
}
	
synchronized public int getGiocatoriPronti(){
	return giocatoriPronti;
}
grazie a tutti, siete gentilissimi!!!!
__________________
Macbook Pro 15'' Mid 2015
IAmZak è offline   Rispondi citando il messaggio o parte di esso
Old 11-01-2009, 19:52   #6
Ken1986
Member
 
Iscritto dal: Nov 2007
Messaggi: 122
Non sono sicuro di quello che dico perchè non ho testato, ma nel metodo giocatoriPronti() ci vorrebbe una bel notifyAll() per risvegliare tutti i girocatori
Ken1986 è offline   Rispondi citando il messaggio o parte di esso
Old 11-01-2009, 19:55   #7
IAmZak
Senior Member
 
Iscritto dal: Oct 2005
Messaggi: 654
Quote:
Originariamente inviato da Ken1986 Guarda i messaggi
Non sono sicuro di quello che dico perchè non ho testato, ma nel metodo giocatoriPronti() ci vorrebbe una bel notifyAll() per risvegliare tutti i girocatori
ma notifyAll li non serve. cioè quel metodo è solo un ++ per la variabile, che poi quando viene letta dall'arbitro (e se è 5), fà si che il programma prosegua.

se non trovo via di scampo da questo problema, mi conviene studiare un modo per far partire i giocatori (e va beh qua nel main c'è lo start()), addormentarli, e farli svegliare dall'Arbitro quando mi serve. Anzi se qualcuno ha un idea...
__________________
Macbook Pro 15'' Mid 2015
IAmZak è offline   Rispondi citando il messaggio o parte di esso
Old 11-01-2009, 21:54   #8
Don[ITA]
Senior Member
 
L'Avatar di Don[ITA]
 
Iscritto dal: Jul 2006
Città: Bergamo
Messaggi: 401
Da quel che vedo, ti suggerirei caldamente di studiarti molto meglio la parte sui thread, sul loro utilizzo e sul loro controllo. In quel codice ci sono un sacco di errori che non stò nemmeno ad elencare
Cmq per darti un idea di sincronizzazione di thread simile a quella che vorresti ottenere tu, guardati questo codice:
Codice:
public class ThreadSyncDemo {

    public static void main(String[] args) {
        new ThreadSyncDemo();
    }

    public ThreadSyncDemo() {
        Tavolo tavolo = new Tavolo();
        new Arbitro(tavolo).start();
        new Giocatore(0, tavolo).start();
        new Giocatore(1, tavolo).start();
        new Giocatore(2, tavolo).start();
        new Giocatore(3, tavolo).start();
        new Giocatore(4, tavolo).start();
    }

    private class Giocatore extends Thread {

        private Tavolo tavolo;
        private int i;

        public Giocatore(int i, Tavolo tavolo) {
            this.i = i;
            this.tavolo = tavolo;
        }

        @Override
        public void run() {
            System.out.println("Giocatore " + i + " inizia.");
            tavolo.aggiungiGiocatore();
            System.out.println("Giocatore " + i + " termina.");
        }
    }

    private class Arbitro extends Thread {

        private Tavolo tavolo;

        public Arbitro(Tavolo tavolo) {
            this.tavolo = tavolo;
        }

        @Override
        public void run() {
            System.out.println("Arbitro inizia.");
            while(tavolo.getGiocatoriCollegati() < 5) {
                System.out.println("Limite giocatori non ancora raggiunto.");
            }
            System.out.println("Arbitro termina.");
        }
    }

    private class Tavolo {

        private int giocatoriCollegati;
        private final Object inUse;

        public Tavolo() {
            giocatoriCollegati = 0;
            inUse = new Object();
        }

        public void aggiungiGiocatore() {
            synchronized(inUse){
                giocatoriCollegati++;
            }
        }

        public int getGiocatoriCollegati() {
            synchronized(inUse){
                return giocatoriCollegati;
            }
        }


    }
}
Se non ti è chiaro chiedi pure
__________________
iMac 27" 5K
Don[ITA] è offline   Rispondi citando il messaggio o parte di esso
Old 11-01-2009, 22:07   #9
IAmZak
Senior Member
 
Iscritto dal: Oct 2005
Messaggi: 654

grazie mille!
quindi così posso gestire il problema da dio!
e ho anche capito il codice! il mio problema è che leggere codice riesco, ma poi partire da 0 per fare cose diverse, mi incasino.
grazie di cuore, nel caso posterò ancora
__________________
Macbook Pro 15'' Mid 2015
IAmZak è offline   Rispondi citando il messaggio o parte di esso
Old 11-01-2009, 22:13   #10
IAmZak
Senior Member
 
Iscritto dal: Oct 2005
Messaggi: 654
visto che sei disponibile ti chiedo una cosa.
se io voglio che arbitro fermi i giocatori, stampi a schermo 2 robe, faccia ripartire i giocatori (e qua intendo che il giocatore rifà il run()), dopo che fanno il run li riferma, e così via..... come faccio a farlo? (seguendo il filone delle cose che mi hai appena scritto)
sempre grazie e se puoi/vuoi
__________________
Macbook Pro 15'' Mid 2015
IAmZak è offline   Rispondi citando il messaggio o parte di esso
Old 11-01-2009, 22:28   #11
IAmZak
Senior Member
 
Iscritto dal: Oct 2005
Messaggi: 654
ehm.... il tuo codice di prima non va.
mi esce giocatori creati e ok ma poi esce una valanga di volte limite non raggiunto, poi ancora giocatori collegati, poi ancora limite, e poi arbitro termina.
parlo del tuo codice, il mio è commentato
__________________
Macbook Pro 15'' Mid 2015
IAmZak è offline   Rispondi citando il messaggio o parte di esso
Old 11-01-2009, 22:38   #12
IAmZak
Senior Member
 
Iscritto dal: Oct 2005
Messaggi: 654
ah ecco perchè non mi và. tu hai fatto tutto in un unico file .java (almeno che non hai scritto sbagliato il codice prima)

io invece o un file per ogni cosa....
giocatore.java
arbitro.java
tavolo.java
main.java
__________________
Macbook Pro 15'' Mid 2015
IAmZak è offline   Rispondi citando il messaggio o parte di esso
Old 11-01-2009, 22:42   #13
Don[ITA]
Senior Member
 
L'Avatar di Don[ITA]
 
Iscritto dal: Jul 2006
Città: Bergamo
Messaggi: 401
Si si era tutto in un unico file
Per quanto riguarda il fermare tutto e poi far ripartire dovresti usare wait() e notify() o notifyAll(). Ora vado a nanna che domani ho la leva alle 6 cmq domani appena torno ti posto dell'altro codice

Notte a tutti
__________________
iMac 27" 5K
Don[ITA] è offline   Rispondi citando il messaggio o parte di esso
Old 11-01-2009, 22:44   #14
IAmZak
Senior Member
 
Iscritto dal: Oct 2005
Messaggi: 654
ok thanks!

cmq il tuo codice (proprio solo il tuo in un unico file) funziona, ma come mai prima dice 7 volte limite non raggionto, poi appaiono i giocatori, e poi dice ok.... non si può "reincastrare" le frasi per renderlo più ordinato?
__________________
Macbook Pro 15'' Mid 2015

Ultima modifica di IAmZak : 11-01-2009 alle 22:48.
IAmZak è offline   Rispondi citando il messaggio o parte di esso
Old 11-01-2009, 23:37   #15
IAmZak
Senior Member
 
Iscritto dal: Oct 2005
Messaggi: 654
ok ho messo anche io tutto in un unico file. e ho corretto usando il tuo codice, e funziona tutto
Ora mi serve solo sapere queste 2 cose, e dopo posso dire grazie di cuore e non romperò più le balle, promesso
1)
Quote:
Originariamente inviato da IAmZak Guarda i messaggi
se io voglio che arbitro fermi i giocatori, stampi a schermo 2 robe, faccia ripartire i giocatori (e qua intendo che il giocatore rifà il run()), dopo che fanno il run li riferma, e così via..... come faccio a farlo?
2)
se ho nel run di giocatore, un while{Arbitro.a==7){...}, e a lo modifica Arbitro (durante il suo run)........... come faccio a far capire al giocatore che questa a è 7 (e quindi lui esce dal while e prosegue le sue storie)


fine, giuro poi non sasso più :-)

siete un forum magnifico :-)
__________________
Macbook Pro 15'' Mid 2015
IAmZak è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Motorola razr fold, dalla conchiglia al formato a libro. La recensione Motorola razr fold, dalla conchiglia al formato ...
Recensione Google Pixel Watch 5: sembra lo stesso, ma al polso la differenza si sente Recensione Google Pixel Watch 5: sembra lo stess...
Nokia Innovation Day 2026: la sovranità europea passa dal mercato unico e dai laboratori italiani del gruppo Nokia Innovation Day 2026: la sovranità e...
In sella alla Fiido Nomads Pro: e-bike con motore centrale da 100 Nm per il divertimento a 360 gradi In sella alla Fiido Nomads Pro: e-bike con motor...
ASUS Zenbook 14 (UX3480AA): tanta autonomia con uno chassis bello e robusto ASUS Zenbook 14 (UX3480AA): tanta autonomia con ...
Starship: SpaceX potrebbe tentare di rec...
Federico Veronesi vince i Wildlife Photo...
Samsung Galaxy bloccati dopo l'aggiornam...
L'UE prolunga il periodo di test del pro...
Offerte Amazon di oggi: e-bike da 616€, ...
La missione cino-europea ESA Smile ha in...
Cisco sulle tracce dell’IA nei malware: ...
Nuovo Codice della strada: stop alla PEC...
Blue Origin Constellation Park: un nuovo...
E-bike da 615€ su Amazon: Bodywel F20PRO...
Windows 11 24H2, stop al supporto per Ho...
Gemini 4 Argon disponibile per tutti: co...
Sony avrebbe chiuso Overdrive, lo store ...
Abbiamo scattato con OPPO Find X10 Pro M...
Fino a 21 miliardi per i chip americani:...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 21:37.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Served by www3v