所有线程完成后如何打印内容?

时间:2017-02-07 20:40:04

标签: java multithreading

我想在两个线程完成运行后打印一些东西。我一直在阅读类似问题的答案,所有这些都是关于尝试join()方法。这对我来说是个问题,因为我尽量不破坏两个线程交替运行的方式。如果我用第一个线程使用方法,第二个线程就没有机会参与我希望他们做的动作。反过来说。

如何在两个线程交替运行后立即打印出来的东西?

我会在这里附上代码。文件f1和f2每个包含10个随机数字。

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();
    }
}

1 个答案:

答案 0 :(得分:0)

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

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

这将触发两个线程,然后才会等待第一个线程完成,然后等待第二个线程。

HTH。