Home E-Books Effetti speciali e sviluppo giochi in Java La teoria dietro i threads 

Effetti speciali e sviluppo giochi in Java(TM) -La teoria dietro i threads  

di Anibal Wainstein (traduzione di Hanami Solutions)

3.0 La teoria dietro i threads 

I programmi multi-threads hanno fatto la loro comparsa su PC col rilascio di Windows 95. Sistemi operativi come UNIX li avevano già da molto tempo. Un thread funziona come un "piccolo operaio" che lavora col codice sorgente del programma. Se avete svariati programmi che girano nel vostro sistema , allora esiste almeno un thread per ogni programma.Alcuni programmi possono avere svariati threads,per esempio un browser che supporti Java. Per avere delle applets Java animate siamo costretti a usare due threads. Prima di tutto c'è il programma o thread principale che è il thread proprio della Java Virtual Machine. Questo viene usato per il cosidetto sistema di eventi che gestisce l'input dell'utente come movimenti del puntatore del mouse ed eventi relativi alla tastiera. Nello scorso capitolo abbiamo lavorato solo col thread principale. Il problema con le animazioni è che spesso richiedono un thread che si occupi continuamente del codice dell'animazione. Non possiamo usare il thread principale perché le altre funzioni della applet smetterebbero di funzionare, l' applet si bloccherebbe. Un programma che si blocca, di solito lo fa perché il thread principale resta incastrato in un ciclo del programma e non riesce ad uscirne o entra in collisione con un altro thread e si ferma. Supponiamo che due web designers stiano lavorando ad una homepage. Se non decidono chi fa cosa, finiranno allora per scrivere ognuno il lavoro dell'altro. Questo porta ad aggressività, la cooperazione si interrompe e con essa anche il progetto. Allo stesso modo dovete essere cauti quando usate i threads.

3.0.1 I metodi start() e stop() di una applet (l'interfaccia Runnable) 

Le Applets non hanno un supporto naturale per i threads. Dovete aggiungere il supporto per i thread aggiungendo l'interfaccia Runnable:

import java.applet.*;  
import java.awt.*;
public class threadtest extends Applet implements Runnable { } 

Nella nostra applet threadtest abbiamo "implements Runnable". Con la dichiarazione "implements" potete aggiungere svariate nuove funzioni ad una classe. Si usa per aumentare le abilità della classe. "Runnable" dà accesso a tre nuovi metodi: start(), stop() e run(). In una applet che supporti i threads i metodi init() e paint() sono dapprima chiamati dal thread principale della Java Virtual Machine, il terzo metodo chiamato da questo thread è il metodo start().
Nel metodo start() method potete inizializzare ed avviare il vostro thread di animazione.

public Thread programthread = null
public void start() {
    if (animationthread == null
    {
         animationthread = new Thread(this,"animationthread");
         animationthread.start();
    } }
La variabile "animationthread" è una variabile globale all'interno della applet e dovete dichiararla voi stessi. Quello che il metodo start() fa per prima cosa ` di controllare che il thread non sia già stato creato (a volte alcuni browsers possono eseguire il metodo start() varie volte). Il prossimo passo è di creare il thread stesso. Richiede un riferimento alla vostra applet (questa) ed un nome che potrebbe essere uno qualunque (lo chiamiamo "animationthread" per beneficio di semplicità). Fatto questo avviate il thread col suo proprio metodo start().
Quando il visitatore della homepage cambia pagina o chiude il browser, allora il metodo stop() viene immediatamente invocato dal thread principale della applet: 
public void stop() 
{
    if ((animationthread != null) && animationthread.isAlive())
        animationthread.stop();
    animationthread = null; }
Per ragioni di sicurezza dovrete assicurarvi che il thread sia creato e che sia in esecuzione col metodo isAlive(). Se è così allora il thread viene fermato col proprio metodo stop() ed impostiamo la variabile "animationthread" al valore null.

Con ogni probabilità vi troverete sempre a semplicemente copiare e incollare questi due metodi nei vostri programmi in futuro. Sono metodi generali che hanno tutte le applet di giochi o di effetti speciali.

 

 


Pagina seguente >>