Newsgroup: it.comp.java
Titolo: X Matteo, about threads...

Piccolo prontuario sui thread.
In java un thread viene creato in questo modo:
    Thread first = new Thread(new Reader(messages));
    first.setDaemon(true);
    first.start();
La classe Thread prende come parametro il costruttore della classe che si
vuole eseguire, e i relativi parametri.
setDaemon(true) serve per far si che tutti il thread che stai lanciando
venga automaticamente terminato assieme alla VM, ovvero quando chiudi il
programma.
Una classe, per poter essere eseguita come thread, deve implementare
l'interfaccia Runnable:
public class Reader
    implements Runnable
La classe Thread, dopo aver instanziato la classe da eseguire, richiamerà
il metodo run() della stessa.
Nel mio caso, dovendo leggere ogni tot millisecondi da un db, ho
implementato run() in questo modo:
  public void run()
  {
    System.out.println("Running thread : Reader");
    try
    {
// fuffa relativa alla connessione al DB
      while (true)
      {
        Thread.sleep(1000);
        Statement stmt = conn.createStatement();
        ResultSet res = stmt.executeQuery("SELECT * FROM inbox");
        while (res.next())
        {
          String s = res.getString("text");
/*          if (s.substring(0, 4).equals("msg:"))
            System.out.println(s.substring(4, s.length()));*/
          messages.add(s);
        }
      }
    }
//catch delle eccezioni
  }
A te interessa, a quanto ho capito, leggere ogni tot secondi da una
qualche parte, quindi:
while(true)
{
  Thread.sleep(1000); //come avrai intuito, sospende il thread per 1 sec
  //codice che legge dalla tua sorgente di dati
}
In ogni caso, cerca tra le specifiche delle api, e su google, per
ulteriori esempi e spiegazioni.
Ti consiglio il libro di mokabyte:
http://www.mokabyte.it/manualejava2/download.htm
in particolare il capitolo 11 del primo volume:
11 Programmazione concorrente e gestione del multithread in Java
Saluti!
Raffaele
-- 
Raffaele Castagno
Per mandarmi una mail, rimuovere il SIGILLO.
questo articolo e` stato inviato via web dal servizio gratuito 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it

> Piccolo prontuario sui thread.
Mi è stato molto utile, ti ringrazio :-) Voglio approfittare della tua
pazienza per farti una piccola domanda. E' possibile come in C fare delle
chiamate al sistema operativo facendo eseguire dei comandi direttamente da
sorgente Java? Mi spiego meglio: è possibile per esempio far partire
l'eseguibile unix di tcpdump ed analizzarne gli output direttamente da un
metodo?
Grazie

 > Piccolo prontuario sui thread.

Runtime runtime = Runtime.getRuntime();
Process process = null;
process = runtime.exec("tcpdump");
BufferedReader ls_in = new BufferedReader(new InputStreamReader
(process.getInputStream()));
try
{
  while ((output = ls_in.readLine()) != null)
  {
    System.out.println(output);
  }
}
catch (IOException e)
{
  System.exit(0);
}
(dovrebbe) eseguire il comando "tcpdump" e stamparne l'output.
Cerca tra le specifiche delle api per ulteriori dettagli.
Fai attenzione solo ad una cosa: quando richiami un metodo in questo modo,
il sistema controlla i permessi basandosi su quelli dell'utente che ha
lanciato la Virtual Machine. Quindi, ad esempio sotto linux, non potrai
lanciare comandi che può lanciare solo root se lanci il programma come
user.
Saluti
