...
Taxi Trondheim AS fungerer på følgende måte:
En døgnåpen taxisentral tar i mot henvendelser fra kunder, avklarer hvilken tjeneste kunden vil ha (vanlig taxi, maxitaxi, tidspunkt for henting, osv.), kontakter en passende taxi og overlater kunden til taxisjåføren. Taxisjåføren henter så kunden, og kjører dit kunden ønsker å dra. Når kunden er framme, slippes vedkommende av og taxisjåføren stopper for å vente på en ny oppringning fra taxisentralen. Taxi Trondheim AS har mange taxier som kan kjøre mange kunder samtidig.
I dette eksempelet vil hele Taxi Trondheim AS være en prosess. Taxisentralen som tar i mot henvendelser fra kunder tilsvarer hovedtråden, som kjører så lenge prosessen gjør. Når sentralen kontakter taxier (som bare står stille) og tildeler de kunder, tilsvarer dette at hovedtråden lager en ny tråd. Etter at taxisjåføren har utført oppdraget, kjørt kunden dit den ønsker, stopper taxisjåføren og tråden avsluttes. Men hovedtråden (taxisentralen) vil naturligvis fortsatt ta i mot henvendelser. En prosess (Taxi Trondheim) vil altså kunne mange tråder (taxier) kjørende samtidig.
Trådobjekter
For at et trådobjekt skal kunne brukes trenger det egentlig bare to ting:
Først må vi fortelle tråden hva den skal utføre i run-metode. Deretter må tråden startes.
Det er hovedsakelig to måter å starte en ny tråd på.
Gi et Runnable-objekt til en ny Thread:
Klassen Taxi implementerer runnable, et grensesnitt som krever at taxi har run-metoden. Main-metoden lager så nye tråder, og gir de et runnable-objekt som forteller hvordan tråden skal kjøres. Deretter kan trådene startes.
Denne måten er mer generell fordi runnable-objektet kan arve fra en annen klasse enn Thread.
|
|
---|
Instansere en klasse som arver Thread:
Klassen taxi arver Thread og kan derav startes selv. Man legger oppførselen (run-metoden) til tråden direkte. Denne måten er lettere å bruke i enkle applikasjoner, men begrenser klassen ved at den må arve Thread.
|
|
---|
Med tråder følger det mye nyttig funksjonalitet, f.eks. Thread.sleep() -funksjonen. Mer om funksjonalitet i forbindelse med tråder finnes her.