Java: Threads

advertisement
Java:
Threads
André van Kooij
17 april 2001
Control Flow (1): Serie statements
Meest simpele programma: bestaat uit een reeks instructies (statements) die
stap voor stap worden uitgevoerd geëxecuteerd:
statement1;
statement2;
...
statementn;
1
Tussendoor: Wat zijn statements?
• Expressie-statements: expressie plus ;
Geldt alleen voor de volgende expressie’s:
– assignment expressies: =, +=, . . .
– method calls (met of zonder return waarde)
– object creation: new(. . .)
– prefix/postfix ++ en −−
• Declaratie-statements—met name locale variabele declaratie (en initialisatie):
Type plus naam;
Type naam = waarde;
2
Vervolg op Wat zijn statements?
• Control flow statements
– blok tussen { en }
mag gebruikt worden waar één statement is toegestaan, want het is één
statement
– conditionals (if-else, switch), loops (while, do-while, for), labels, break,
continue, return
– exceptions, . . .
3
Control Flow (2): Veranderlijke volgorde
Met dergelijke control flow statements kun je de volgorde van uitvoering van de
instructies laten afhangen van de toestand van het programma
N.B. Het is conceptueel nog steeds één reeks van instructies die uitgevoerd
worden
4
Voorbeeld
public class UpperCaser extends StringTransformer
{
public String transform ( String what )
{
return what.toUpperCase();
}
}
UpperCaser cap = new UpperCaser();
cap.transform( "Who’s there?" );
5
Tussendoor: Wat is het begin?
Beginpunt van de reeks instructies is de methode
public static void main ( String[] args )
in de class die je aan java meegeeft.
6
Control Flow (3): Threads
Een thread is een reeks van instructies die uitgevoerd worden.
In één programma kunnen er meerdere threads zitten. Iedere thread heeft z’n
eigen reeks instructies. Voorbeeld: een timer.
7
Threads in Java
In Java gebeurt uitvoering van een reeks instructies door Thread-objecten. Een
Thread-object stuurt andere objecten aan: het animeert andere objecten.
Het thread-object roept van tijd tot tijd tegen het geanimeerde object dat het
‘iets’ moet doen.
8
Geanimeerde objecten
Objecten moeten aangeven dat ze geanimeerd kunnen worden. Dit kunnen ze
doen door een interface te implementeren.
public interface Animate
{
public abstract void act();
}
9
Voorbeeld: Van Counter naar Timer
class Counter implements Counting, Resettable {
private int currentValue;
public Counter() {
this.reset();
}
public void increment() {
this.currentValue = this.currentValue + 1;
}
public void reset() {
this.currentValue = 0;
}
public int getValue() {
return this.currentValue;
}
}
10
class Timer implements Animate {
private int currentValue;
public Timer() {
this.reset();
}
public void increment() {
this.currentValue = this.currentValue + 1;
}
public void reset() {
this.currentValue = 0;
}
public int getValue() {
return this.currentValue;
}
public void act() {
this.increment();
}
}
11
Thread objecten
Om de timer te aan te sturen (‘te animeren’) is er ook een Thread-object nodig
dat af en toe act() roept.
Timer tick = new Timer();
AnimatorThread mover = new AnimatorThread( tick );
mover.startExecution();
Het statement mover.startExecution() is bijna onmiddellijk klaar; hierna zijn er
twee threads actief.
12
Alles in één
public class AnimatedTimer implements Animate
{
private int currentValue;
private AnimatorThread mover;
public AnimatedTimer()
{
this.reset();
this.mover = new AnimatorThread( this );
this.mover.startExecution()
}
...
}
13
Sjabloon
public class AnimateObject implements Animate
{
private AnimatorThread mover;
public AnimateObject()
{
this.mover = new AnimatorThread( this );
this.mover.startExecution()
}
public void act()
{
...
}
}
14
Download