Ich habe den folgenden Code mit Threading versuchtIn diesem Code habe ich zwei Ausführungsmethoden in zwei verschiedenen Klassen deklariert. und ich habe diese Methode von meiner Hauptmethode aufgerufen. Eigentlich möchte ich wissen, welche run () -Methode zuerst aufgerufen wird. Ich habe unterschiedliche Ausgaben für den gleichen Code, wenn ich immer wieder laufe.
Mein Code:
class parent
{
public synchronized void display1()
{
System.out.println("Dispaly_1 is invoked");
}
public synchronized void display2()
{
System.out.println("Dispaly_2 is invoked");
}
}
class abc extends Thread{
parent p;
public abc(parent p){
this.p = p;
}
public void run(){
System.out.println("abc start...");
p.display1();
}
}
class xyz extends Thread{
parent p;
public xyz(parent p){
this.p = p;
}
public void run(){
System.out.println("xyz start...");
p.display2();
}
}
public class ThreadExample {
public static void main(String[] args) {
parent p=new parent();
abc ob=new abc(p);
xyz ob1=new xyz(p);
ob.start();
ob1.start();
}
}
Ausgänge: 1. Mal
abc start...
xyz start...
Dispaly_2 is invoked
Dispaly_1 is invoked
2. Mal
xyz start...
Dispaly_2 is invoked
abc start...
Dispaly_1 is invoked
3. Mal
abc start...
Dispaly_1 is invoked
xyz start...
Dispaly_2 is invoked
Ich habe mit dieser Ausgabe verwechselt, Jeder kann dieses Ergebnis des Codes erklären. Ihre Hilfe wird es zu schätzen wissen. Vielen Dank
Antworten:
5 für die Antwort № 1Welche Klasse run () Methode wird zuerst aufgerufen?
Entweder.
und warum?
Es ist unbestimmt. Bis zum Thread Scheduler.
Wenn Sie eine sequenzielle Ausführung wünschen, verwenden Sie keine Threads.
1 für die Antwort № 2
Es hängt alles vom Scheduler ab. Ein Thread kann von Scheduler unabhängig verwaltet werden. Auch wenn Sie zuerst Ihren abc-Thread starten, wird xyz möglicherweise zuerst vom Scheduler ausgeführt oder umgekehrt.
Der zuerst gestartete Thread wird nicht immer zuerst ausgeführt.
Hoffe, meine Antwort gibt Klarheit über Scheduler.