"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
class Printer implements Runnable
{
public void run()
{
System.out.println("I’m printer");
}
}
Klasse som implementerer Runnable - grensesnittet.
public static void main(String[] args)
{
Printer printer = new Printer();
Thread childThread = new Thread(printer);
childThread.start();
}
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."

Opprette og starte nye tråder - 1

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
class Printer implements Runnable
{
private String name;
public Printer(String name)
{
this.name = name;
}
public void run()
{
System.out.println("I’m " + this.name);
}
}
Klasse som implementerer Runnable-grensesnittet.
public static void main(String[] args)
{
Printer printer1 = new Printer("Nick");
Thread thread1 = new Thread(printer1);
thread1.start();

Printer printer2 = new Printer("Jack");
Thread thread2 = new Thread(printer2);
thread2.start();
}
Lag to tråder, som hver vil være basert på sitt eget skriverobjekt.
public static void main(String[] args)
{
Printer printer = new Printer("Natasha");

Thread thread1 = new Thread(printer);
thread1.start();

Thread thread2 = new Thread(printer);
thread2.start();

Thread thread3 = new Thread(printer);
thread3.start();
}
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å
class Printer extends Thread
{
private String name;
public Printer(String name)
{
this.name = name;
}
public void run()
{
System.out.println("I’m " + this.name);
}
}
Arv Thread -klassen, som implementerer Runnable- grensesnittet, og overstyr deretter kjøremetoden .
public static void main(String[] args)
{
Printer printer = new Printer("Jack");
printer.start();

Printer printer2 = new Printer("Jack");
printer2.start();

}
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?"

Kode
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() ."