Første
Java Tråde (MultiServer) serie, Planche nr. 12
Kursus Indhold

Udskrift af : Java Tråde (MultiServer)

Planche 1 : Java Tråde (MultiServer)

Java har indbygget mekanismer for multiprogrammering

Koncepter:

Planche 2 : Livscyklus

En tråd kan være En tråd der er running skifter med: En tråd bliver ready med

Planche 3 : Implementering

Planche 4 : Hvilken kode udføres

Planche 5 : Udvidede Thread

public class MinTraad extends Thread {
  public void run() {
    // denne kode udføres i tråden
  }
}

Opret en tråd

Start den...

Planche 6 : Implementere Runnable

public class Spagetti extends Applet implements Runnable {
   public void run() {
     // trådet kode...
   }
   // andre definition, f.eks init()
}

Startes f.eks. i init() med

Eller fra et andet objekt Start med

Planche 7 : Når det er slut...

En tråd er død, når den

Planche 8 : Flertrådede servere

EchoServer som gennemgået kan ikke håndtere flere requests samtidig. Ved at give en request til en særlig servertråd, kan man håndtere flere: Flyt den del af koden, som etablerer forbindelse og svarer en klient over en trådklasses run()-metode
public class MultiServerTraad extends Thread {
    private Socket socket = null;

    public MultiServerTraad(Socket socket) {
        super("MultiServerTraad");
        this.socket = socket;
    }

    public void run() {
	/*
	 * Åben PrintWriter out stream på ved hjælp af socket-variabel
         * Resten som i EchoServer - inklusive close() på in, out og
         * socket. Husk at håndtere evt. IOException
         */
    }
}

Planche 9 : Kontrol-klassen

Den faste del
public class MultiServer {
    public static void main(String[] args) throws IOException {
        ServerSocket serverSocket = null;
        boolean listening = true;
        ...
        serverSocket = new ServerSocket(4444);

        while (listening) {
	    Socket sok = serverSocket.accept();
	    MultiServerTraad traad = new MultiServerTraad(sok);
	    traad.start();
        }
        serverSocket.close();
    }
}
Eksemplet er forenklet (der mangler try-catch)

Planche 10 : Opgave

Ovennævnte tilfælde kan faktisk implementeres i en klasse definition.

(Hint: klassen MultiServer realiseres ikke nogen steder...)

1) Lav en klasse MultiServers, der kan håndtere flere requests.

2) Få serveren til at lukke ned via en request...

Planche 11 : Mere tråde

I ovennævnte eksempel synkroniserer trådene automatisk (via blocking io).

Tråde kan synkronisere med

Planche 12 : Beskytte delte data

Alle objekter har en - og kun en - lås (lock) Systemet sørger for, at kun en tråd er i en synchronized metode ad gangen - øvrige metoder bliver sat til at vente...


© 2000 BLA*net - Leif E. Andersen, leander@blanet.dk
Første
Java Tråde (MultiServer) serie, Planche nr. 12