Hem E-böcker Specialeffekter och spelutveckling i Java Principerna bakom programtrådar

Specialeffekter och spelutveckling i Java(TM) - Principerna bakom programtrådar

av Anibal Wainstein

3.0 Principerna bakom programtrådar 

I och med releasen av Windows 95 så introducerades multipla programtrådar till PC programmeringen. Operativsystem som t.ex. UNIX har länge haft detta. En tråd fungerar som en "liten arbetare" som sitter och arbetar med programkoden. Har du flera program igång i systemet så finns minst en tråd för varje program. Vissa program kan ha flera trådar som t.ex. en web tittare som stöjder Java. För att kunna ha animerade Java applets så är vi tvungna att använda oss av två trådar. Först finns program- eller huvudtråden som brukar ibland vara Java motorns egen tråd. Denna används för den så kallade händelsesystemet som tar hand om användarinput som t.ex. musrörelser och tangenbordshändelser. I förra avsnittet så har vi enbart arbetat med huvudtråden. Problemet med animationer är att de ofta kräver att man har en tråd som hela tiden sitter och jobbar med animationskoden. Huvudtråden kan vi inte använda för då skulle appletens andra funktioner att sluta fungera, appleten hänger sig. Ett program som hänger sig brukar oftast bero på att en huvudtråd fastnar i en programslinga och kommer inte loss eller att den krockar med en annan tråd och stannar. Anta att två web designers sitter och arbetar med en hemsida. Om de inte bestämmer vem som ska göra vad så kommer det troligen att sluta med att de skriver över varandras ändringar. Detta leder till att båda blir arga, samarbetet spricker och därmed också projektet. På samma sätt måste man vara försiktig när man använder trådar. 

3.0.1 En applets start() och stop() metoder (Runnable gränssnittet) 

Applets har ingen naturlig stöd för trådar. Man sätter stöd genom att lägga till Runnable gränsnittet (interface): 

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

I vår hittils tomma trådtest applet så har vi lagt till "implements Runnable" gränsnitt. Med deklarationen "implements" kan man lägga till en rad extra funktioner åt en klass. Den används för att utöka klassen. "Runnable" kommer att ge tillgång till tre extra metoder: start(), stop() och run(). 
I en applet som stödjer trådar brukar init() och paint() metoderna utföras av Java motorns huvudtråd först, den tredje metoden som anropas är start() metoden. 
I start() metoden kan du initiera och starta din animationstråd. 

public Thread programtrad = null
public void start() 
{
    if (programtrad == null) 
    {
         programtrad = new Thread(this,"programtrad");
         programtrad.start();
    }
}
Variabeln "programtrad" är global inom appleten och du måste deklarera den själv. Vad startmetoden gör först är att den undersöker att inte tråden redan existerar och är igång (ibland kan vissa web tittare köra start() metoden flera gånger). 
Nästa steg är att skapa själva tråden. Den kräver en pekare till din applet (this) och ett namn som kan vara vad som helst (vi kallar den för "programtrad" för enkelhetens skull). 
Till sist så startar man tråden med dess egen start() metod. 

När hemsidebesökare byter sida eller stänger av sin browser så anropas genast stop() metoden med huvudtråden: 
 

public void stop() 
{
    if ((programtrad != null) && programtrad.isAlive())
        programtrad.stop();
    programtrad = null;
}
För säkehets skull så undersöker man att programtråden är skapad och att den är igång med metoden isAlive(). Är den detta så stoppas tråden med dess egen stop() metod och vi sätter "programtrad" till null. 

Dessa två metoder kommer du troligen alltid att bara klippa ut och klistra in i dina program i framtiden. Dessa är generella metoder som alla specialeffekts- eller spelapplets har. 

 

 

 


Nästa sida >>