Ich habe 3 thread, die ich möchte es in der Reihenfolge zu drucken, aber wenn ich das Programm laufen lassen es Ergebnis erhalten. Ich verstehe nicht, wie es Thread in Reihenfolge nicht laufen konnte. Ich möchte Thread 1 und 2 bzw. 3 weiterlaufen lassen. In jedem Thread gibt es eine Schleife zum mehrfachen Drucken. Also würde ich gerne den Haupt-Thread machen, um jeden Thread in Reihenfolge zu durchlaufen. Das ist mein Code.Wie macht man Thread in Ordnung und läuft oft?
threadMessage("Starting MessageLoop thread");
long patience =
long startTime = System.currentTimeMillis();
Thread t = new Thread(new MessageLoop());
Thread t2 = new Thread(new MessageLoop2());
Thread t3 = new Thread(new MessageLoop3());
t.setPriority(10);
t2.setPriority(5);
t3.setPriority(1);
t.start();
t2.start();
t3.start();
Das ist mein Thread-Funktion (3 Fäden)
private static class MessageLoop
implements Runnable {
public void run() {
try {
for(int i = 0;i<20;i++)
{
Thread.sleep(1000);
// Print a message
threadMessage("A");
}
} catch (InterruptedException e) {
threadMessage("thread interrupted");
}
}
}
private static class MessageLoop2
implements Runnable {
public void run() {
try {
for(int i = 0;i<20;i++)
{ Thread.sleep(1000);
// Print a message
threadMessage("B");
}
} catch (InterruptedException e) {
threadMessage("thread interrupted");
}
}
private static class MessageLoop3
implements Runnable {
public void run() {
String importantInfo = "E";
try {
for(int i = 0;i<20;i++)
{
Thread.sleep(1000);
// Print a message
threadMessage(importantInfo);
}
} catch (InterruptedException e) {
threadMessage("Thread interrupted");
}
}
Und dies ist mein Code, um es ausführen, um zu machen. Ich möchte mein Programm in der Reihenfolge wie diese MessageLoop1 und 2 und 3 jeweils ausführen.
while (t.isAlive()) {
threadMessage("Still waiting...");
t.join(2000);
if (((System.currentTimeMillis() - startTime) > patience)
&& t.isAlive()) {
threadMessage("Tired of waiting!");
t.interrupt();
// Shouldn't be long now
// -- wait indefinitely
t.join();
}
while(t2.isAlive()){
threadMessage("Still waiting...");
t2.join(1000);
if (((System.currentTimeMillis() - startTime) > patience)
&& t2.isAlive()) {
threadMessage("Tired of waiting!");
t2.interrupt();
// Shouldn't be long now
// -- wait indefinitely
t2.join();
}
}
while(t3.isAlive()){
threadMessage("Still waiting...");
t3.join(1000);
if (((System.currentTimeMillis() - startTime) > patience)
&& t3.isAlive()) {
threadMessage("Tired of waiting!");
t3.interrupt();
// Shouldn't be long now
// -- wait indefinitely
t3.join();
}
}
}
Aber das Ergebnis wie B kommt, A, C. Kann jemand diese Situation erklären? Und ist mein Code falsch? Vielen Dank!
Sie kontrollieren nicht die Reihenfolge; das Betriebssystem tut es. Wenn die Reihenfolge wichtig ist, sollten sie nicht in separaten Threads sein. – duffymo