Con il presente esempio si è voluto realizzare un codice Java che simuli la vita di un essere vivente, per illustrare le potenzialità dell’utilizzo dei Thread.
package prova.thread; /** * * @author Abejan * @version 28/12/2010 */ public class ThreadEssereVivente extends Thread{ // stato=informazione dell'essere vivente, assumere uno dei presenti valori 'DORMIRE', 'MANGIARE', 'GIOCARE', 'RIPRODURSI', 'MORTO', nel caso del riprodursi deve generare due altri esseri viventi private String stato; public ThreadEssereVivente(String s) { //passo al costuttore del Thread il nome del thread super(s); setStato("MANGIARE"); //lo stato iniziale dell'essere vivente è MANGIARE } @SuppressWarnings("static-access") public void run() { //se il presente thread ha superato la 4 generazione // setto lo stato in morto if (this.getName().length()>4){ setStato("MORTO"); } if (stato=="MORTO"){ stampa_video(); } //fin quando il tread é ancora in essere e lo stato non é in MORTO, while (this.isAlive()&&stato!="MORTO") { // randomizzo i 4 stati switch ((int)(4*Math.random())+1) { case 1: setStato("DORMIRE"); stampa_video(); break; case 2: setStato("MANGIARE"); stampa_video(); break; case 3: setStato("GIOCARE"); stampa_video(); break; case 4: setStato("RIPRODURSI"); stampa_video(); riprodursi(); break; }//end switch try { //attendo 1 secodo per il thread corrente this.sleep(1000); } catch (Exception e) {} }//end while } //metodo che permette di generare due nuovi thread, figli di quello in essere // e setta lo stato del presente thread in morto private void riprodursi(){ //creo il primo thread figlio ThreadEssereVivente tevf1 = new ThreadEssereVivente(String.valueOf(this.getName()+"0")); tevf1.start(); //creo il secondo thread figlio ThreadEssereVivente tevf2 = new ThreadEssereVivente(String.valueOf(this.getName()+"1")); tevf2.start(); //setto lo stato del thread corrente, per farlo terminare setStato("MORTO"); } //stampa a video lo stato del thread private void stampa_video(){ System.out.println("Thread '" + this.getName() +"' stato = "+this.getStato() + " Thread attivi = " + Thread.activeCount()); } public void setStato(String stato) { this.stato = stato; } public String getStato() { return stato; } public static void main(String args[]) throws InterruptedException { /* Lancio il primo thread */ ThreadEssereVivente tc1 = new ThreadEssereVivente("0"); tc1.start(); } }