2017-02-07 2 views
0

Ich versuche etwas zu drucken, nachdem zwei Threads fertig sind. Ich habe Antworten auf ähnliche Fragen gelesen und alle von ihnen versuchten, Join() Methode zu versuchen. Dies ist ein Problem für mich, da ich versuche, die Art und Weise, wie die beiden Threads abwechselnd laufen, nicht zu ruinieren. Wenn ich schreibe, benutze die Methode für den ersten Thread, der zweite wird keine Chance bekommen, an der Aktion teilzunehmen, die ich möchte. Und umgekehrt.Wie kann ich etwas drucken, nachdem alle Threads beendet sind?

Wie kann ich etwas drucken, nachdem beide Fäden abwechselnd ausgeführt wurden?

Ich werde den Code hier anhängen. Die Dateien f1 und f2 enthalten jeweils zehn Zufallszahlen in getrennten Zeilen.

import java.io.FileReader; 
import java.io.IOException; 
import java.util.Scanner; 

public class JavaTip3Thread extends Thread 
{ 
    public Thread thread; 
    static int a[] = new int[10]; 
    static int b[] = new int[10]; 
    static int c[] = new int[10]; 
    static int index = 0; 
    static boolean fin = false; 
    static int ok; 

    public JavaTip3Thread() 
    { 
     thread = new Thread(this); 
    } 

    public static int[] read(FileReader in) 
    { 
     Scanner s = new Scanner(in); 
     int[] x = new int[10];; 

     while(s.hasNextLine()) 
     { 
      for(int i = 0; i < 10; i++) 
      { 
       x[i] = s.nextInt(); 
      } 
     } 

     s.close(); 
     return x; 
    } 

    public void sum() 
    { 
     while(fin != true) 
     { 
      int sum = 0; 
      sum += a[index] + b[index]; 
      c[index] = sum; 

      System.out.println(a[index] + " + " + b[index] + " = " + c[index]); 
      index++; 

      if(index == a.length) 
      { 
       fin = true; 
      } 
     } 
    } 

    public void run() 
    { 
     sum(); 
    } 

    public static void main(String args[]) throws IOException 
    { 
     FileReader in = new FileReader("D:\\IESC\\Java\\JavaTip3Thread\\src\\f1.txt"); 
     FileReader in2 = new FileReader("D:\\IESC\\Java\\JavaTip3Thread\\src\\f2.txt"); 

     a = read(in); 
     b = read(in2); 

     JavaTip3Thread t1 = new JavaTip3Thread(); 
     JavaTip3Thread t2 = new JavaTip3Thread(); 

     t1.start(); 
     t2.start(); 

     for(int i = 0; i < 10; i++) 
     { 
      System.out.println("c[" + i + "]= " + c[i] + " "); 
     } 

     in.close(); 
     in2.close(); 
    } 
} 
+0

Warum glauben Sie, dass das Aufrufen von 'Join' in einem Thread verhindern würde, dass der andere Thread weiterhin gleichzeitig ausgeführt wird? \ –

+0

Ich habe die Art, wie join() funktioniert, falsch verstanden. Ich dachte, dass sobald man join() auf einem Thread aufruft, es jeden anderen Thread stoppt, bis es beendet ist. – Vasile

Antwort

0
t1.start(); 
t2.start(); 

t1.join(); 
t2.join(); 

Dies wird beide Threads auslösen und erst dann wird für den ersten Thread für den zweiten Thread zu beenden warten und dann warten.

HTH.

+0

Es hat funktioniert, vielen Dank. Threading ist etwas Neues für mich und ich tendiere dazu, solche Fehler zu machen. – Vasile

Verwandte Themen