Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 12
  1. #1

    i thread in java....come tengo il conto??

    quando i thread eseguono il run(){...} non riesco a far tenere i valori alle variabili cosicché i thread che eseguono il run subito dopo tengono il conto dei valori impostati dal thread precedente...

    è solo un esempio:
    per far fare una conta da 10 a 0....a 5 thread...e qnd uno arriva a 0 stempa "ho vinto" e tutti gli altri stampano "ho perso" subito dopo qll ke ha vinto...
    come faccio a far sapere agli altri ke un thread ha vinto?

  2. #2
    Utente di HTML.it
    Registrato dal
    Aug 2002
    Messaggi
    8,013
    penso sia la 2° problematica che si affronta con i thread... un po' di manuale non guasta mai.

    http://download.oracle.com/javase/tu.../syncmeth.html
    <´¯)(¯`¤._)(¯`»ANDREA«´¯)(_.¤´¯)(¯`>
    "The answer to your question is: welcome to tomorrow"

  3. #3
    non è questo, quello che cerco...

  4. #4
    Nella classe dei thread crei un metodo syncronized di nome conta che incrementa un'attributo conta e ne ritorna il valore.

    Per ogni thread se il valore restituito da conta è maggiore di 0, allora gli fai stampare ho perso, altrimenti ho vinto.
    lolide
    Java Programmer

    Informati

  5. #5
    in pratica devo usare anche il run..
    quindi nella classe che estende il thread...faccio sia il run ke fa la conta...e un altro metodo synchronized ke tiene il conto per tutti gli altri thread??
    se è giusto...
    la variabile contatore nel secondo metodo...la devo dichiarare nella stessa classe come attributo o in un altro modo?

  6. #6
    Semplicemente:

    codice:
    public class MioThread implements Runnable {
        protected static int contatore;
        protected synchronized int conta () {
            return contatore++;
        };
        public void run() {
            int conta = conta();
            if (conta < 10)
                System.out.println("Perso - Pos. " + conta);
            else
                System.out.println("Vinto!!");
        }
    }
    
    public class Main {
        public static void main(String[] args) {
            for (int i = 0; i <= 10;i++) {
    		Thread t = new Thread (new prova());
    		t.start();
    	}
        }
    }
    lolide
    Java Programmer

    Informati

  7. #7
    Utente di HTML.it
    Registrato dal
    Aug 2002
    Messaggi
    8,013
    Originariamente inviato da omar the best
    non è questo, quello che cerco...
    Appunto per questo non ne vieni fuori: scarti a priori proprio l'unica cosa da fare.
    <´¯)(¯`¤._)(¯`»ANDREA«´¯)(_.¤´¯)(¯`>
    "The answer to your question is: welcome to tomorrow"

  8. #8
    scusami ancora...
    ma non capisco perchè metti tutta qll roba nei parametri dell'oggetto...

  9. #9
    Originariamente inviato da omar the best
    scusami ancora...
    ma non capisco perchè metti tutta qll roba nei parametri dell'oggetto...
    ?

    A te serviva una classe istanziata da più thread che tenesse il conteggio delle esecuzioni ed è quello che fa.
    Quel codice è solo un esempio per farti capire il funzionamento.
    Quello che ti serve è una variabile statica che tenga conto delle esecuzioni (se non la facessi statica, verrebbe inizializzata ad ogni istanza del thread quindi conteggio sarebbe sempre 1) ed un metodo synchronized che incrementi il conteggio (synchronized perchè se conosci il funzionamento dei thread, saprai che vengono eseguiti in parallelo, quindi synchronized crea una coda d'accesso a quel metodo che evita che 2 thread modifichino contemporaneamente il contatore).

    Poi che tu non ti sia spiegato bene oppure che non abbia capito cosa sia il multithreading è un'altra cosa.

    PS: I parametri d'oggetto non esistono
    lolide
    Java Programmer

    Informati

  10. #10
    non mi sono spiegato bene...
    la conta...deve essere una gara tra più thread....
    tutti contano....e il primo ke arriva a 0 vince...e si interrompe il programma..

    nel prog ke hai fatto tu...parte un solo thread..

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.