Newsgroup: it.comp.java
Titolo: Creazione ed utilizzo di thread

Ciao ragazzi sto cercando di capire come utilizzare i thread  tramite
un semplice esempio
voglio creare una classe che mi stampa un numero ogni 10 secondi per 5
volte di seguito.
public class SempliceNumero implements Runnable {
   public void run() {
         int i =3;
         System.out.println(""+i);
   }
}
public static void main(String[] args) {
    SempliceNumero s = new SempilceNumero();
    Thread t = new Thread(s);
   for(int j=0; j<5 ;j++) {
   try {
     t.sleep(10000);
     t.start();
   }
   catch(InterruptedException e) {
  }
 }
}
la prima chiamata funziona,poi mi viene sollevata un eccezione. Da come
ho potuto capire mi succede questo perchè un thread può essere
utilizzato una sola volta.Giusto? Allora come posso modificare il
codice per ottenere ciò che voglio? grazie ragazzi!!

questo è il codice corretto e funzionante:
devi riunire la classe SempliceNumero e il main all'interno di una
classe di appoggio,
istanziare un oggetto di tipo <classe di appoggio>.
poi il codice in cui crei il thread nel main piazzalo all'interno del
ciclo for
public class P {
    public class SempliceNumero implements Runnable {
       public void run() {
             int i =3;
             System.out.println(""+i);
       }
    }
    public static void main(String[] args) {
        P pippo = new P();
       for(int j=0; j<5 ;j++) {
           P.SempliceNumero s = pippo.new SempliceNumero();
           Thread t = new Thread(s);
           try {
               t.sleep(10000);
               t.start();
           }
           catch(InterruptedException e) {}
        }
    }
 }

            }
chiamare Thread.sleep su una istanza č se non altro depistante
(per quanto legale)
-- 
sbi

 codice per ottenere ciň che voglio? grazie ragazzi!!
Per esempio, nel metodo run() metti il ciclo for, in cui stampi e fai sleep.
public void run() {
    for(int i=0;i<5;i++) {
       System.out.println("Numero "+tuoNumero);
       try { Thread.sleep(10000); }
       catch(InterruptedException ie) { ... }
    }
}
(questo naturalmente tanto per scrivere qualcosa al volo, dal momento 
che va in sleep anche dopo l'ultimo numero, poi lo adatti alle tue 
circostanze)
Saluti
CarMas

 la prima chiamata funziona,poi mi viene sollevata un eccezione.
Certo. Un thread non può essere avviato più di una volta.
Io credo che tu faccia non poca confusione; quel codice, a parte
istanziare una classe Runnable, non ha proprio nulla a che vedere con i
thread.

 questo è il codice corretto e funzionante:
Continua ad essere un uso improprio dei thread.
Che differenza c'è fra il tuo codice e uno in cui definisci una
classe:
public class SempliceNumero {
   public void run() {
         int i =3;
         System.out.println(""+i);
   }
}
che non implementa Runnable, e dentro il ciclo chiami direttamente il
metodo run()?

probabilmente faccio un po' di confusione anch'io!!!
come dovrebbe venire??

 come dovrebbe venire??
Non so come dovrebbe venire, sto dicendo che quello non è un esempio
adatto per utilizzare i thread.
Tramite i thread il contenuto del metodo run() viene eseguito in
parallelo e in maniera asincrona. Lanciare una operazione "atomica"
come la stampa a video di una variabile in maniera asincrona non ha
senso perchè non vedi differenza fra lanciarla in modo sincrono o
asincrono.
Quindi per rispondere alla tua domanda: cosa volevi fare?