"Hei, Amigo! Ellie fortalte deg om tråder, og jeg skal fortelle deg hvordan du jobber med dem. For å opprette en ny tråd, må du:"
1) Lag et trådobjekt
2) Gi den metoden du vil kjøre
3) Kall opp startmetoden på det opprettede trådobjektet.
Tenk på dette eksemplet:
Kode | Beskrivelse |
---|---|
|
Klasse som implementerer Runnable - grensesnittet. |
|
1 Opprett en forekomst av klassen Printer, som implementerer kjøremetoden. 2 Opprett et nytt trådobjekt. Vi sender konstruktøren skriverobjektet, hvis run()-metode må startes. 3 Start den nye tråden ved å kalle start()- metoden. |
Små Java-programmer består vanligvis av én tråd kalt «hovedtråden». Men programmer lanserer oftere tilleggstråder, som kalles «barnetråder». Hovedtråden kjører hovedmetoden og slutter. Kjøringsmetoden til Runnable er den analoge metoden for underordnede tråder.
"Ah, mange tråder betyr mange hovedmetoder."

For å fortelle et Thread-objekt hvilken spesifikk metode det skal starte, må vi på en eller annen måte sende en metode til det. I Java gjøres dette ved hjelp av Runnable- grensesnittet. Dette grensesnittet inneholder en enkelt abstrakt metode: void run() . Thread-klassen har en Thread(Runnable Runnable) -konstruktør. Du kan sende inn et hvilket som helst objekt som implementerer Runnable- grensesnittet.
Klassen din må arve Runnable og overstyre kjøringsmetoden . Å påkalle denne metoden er det som starter den nye tråden. Du kan skrive hva du vil i kjøremetoden .
Kode | Beskrivelse |
---|---|
|
Klasse som implementerer Runnable-grensesnittet. |
|
Lag to tråder, som hver vil være basert på sitt eget skriverobjekt. |
|
Lag tre tråder basert på ett enkelt skriverobjekt. |
Dessuten kan du kombinere alt dette i én klasse. Thread-klassen arver det Runnable-grensesnittet , så du trenger bare å overstyre kjøremetoden :
En annen måte å lage en ny tråd på | |
---|---|
|
Arv Thread -klassen, som implementerer Runnable- grensesnittet, og overstyr deretter kjøremetoden . |
|
Lag to tråder, som hver vil være basert på sitt eget skriverobjekt . |
"Dette er en mer elegant løsning."
"Ja, men det har sine mangler:"
1) Du må kanskje starte flere tråder basert på et enkelt objekt, som i eksempelet med Natasha.
2) Hvis du arver fra Thread-klassen, kan du ikke legge til en annen overordnet klasse til klassen din.
3) Hvis klassen din har en overordnet klasse, kan du ikke legge til Tråd som en annen overordnet klasse.
"Med andre ord, etter at startmetoden er kalt, begynner hver av trådene å kjøre kjøremetoden til objektet som er sendt til konstruktøren?"
"Ja. Hvis ingenting sendes til konstruktøren, vil Thread bare utføre sin interne kjøringsmetode."
"Men hvorfor kaller vi ikke metoden slik?"
public static void main(String[] args)
{
Printer printer1 = new Printer("Nick");
printer1.run();
}
"Når hovedtråden når kjøringsmetoden , går dens "lille robot" ganske enkelt inn og utfører alle kommandoene i den. Først etter at de er utført vil den gå tilbake til hovedmetoden og fortsette å utføre ytterligere kommandoer . lille robot" vil bli opprettet. Alt arbeidet vil bli utført sekvensielt, ikke parallelt (samtidig)."
"Jeg skjønner. Kan du kalle en annen metode, noe annet enn å løpe?"
"Nei. Det hele er knyttet til Runnable-grensesnittet, som bare "vet" om en av metodene: run() ."
GO TO FULL VERSION