Første
Oversigt
Java Tråde (MultiServer) serie, Planche nr. 12
Print af Java Tråde (MultiServer)
1 : Java Tråde (MultiServer)
Thread-klassen
Runnable-interface
En tråds livscyklus
Hvilken kode udføres i en tråd
Beskyt delte data
2 : Livscyklus
Running
Ready
forskellig afventende tilstande.
suspend()
wait()
sleep()
søger utilgængelig lås
forskellige (blocking) io-kald
notify()
resume()
lås bliver tilgængelig
timeout
IO klar
3 : Implementering
Implementering af tråde er stærkt platformsafhæng
kan være Pre-emptive (frivillig eller tvungen)
kan være Round-Robin (tidsdelt)
Prioriteter 1 til 10 (stærkest)
4 : Hvilken kode udføres
Kode i run()-metoden, men...
Er klassen nedarvet fra Thread?
run()-metoden i underklassen
implementere Runnable?
run()-metoden i klassen, der implementerer
5 : Udvidede Thread
MinTraad min = new MinTraad();
min.start(); // ikke run()...
6 : Implementere Runnable
Thread t = new Thread(this);
Thread t = new Thread(refSpagetti);
t.start();
7 : Når det er slut...
afslutter run()-metode
når tråden udfører stop()-metoden
En død tråd kan ikke "genbruges"
8 : Flertrådede servere
9 : Kontrol-klassen
10 : Opgave
11 : Mere tråde
suspend() / resume() - Kun version 1.1.
sleep() / kaster InterruptedException/løber ud
wait() / notify() eller notifyAll()
12 : Beskytte delte data
En datastruktur, der er delt mellem tråde
En tråd opdatere et element
tråden mister CPU
Anden tråd opdatere andet element
Data er inkonsistent!
Kun en tråd kan have et objekts lås ad gangen
Kritiske regioner (metoder) markeres med synchronized nøgleord
Man kan også markere en blok i en metode synchronized
© 2000 BLA*net - Leif E. Andersen, leander@blanet.dk
Første
Oversigt
Java Tråde (MultiServer) serie, Planche nr. 12