Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/mercurial/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 所有线程完成后,如何打印内容?_Java_Multithreading - Fatal编程技术网

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

Java 所有线程完成后,如何打印内容?,java,multithreading,Java,Multithreading,我试图在两个线程完成运行后打印一些内容。我一直在阅读类似问题的答案,所有这些问题都是关于尝试join()方法的。这对我来说是个问题,因为我尽量不破坏两个线程交替运行的方式。如果我使用第一个线程的方法编写,第二个线程将没有机会参与我希望他们执行的操作。反过来说 如何在两个线程完成交替运行后立即打印内容 我会在这里附上代码。文件f1和f2分别在单独的行中包含十个随机数 import java.io.FileReader; import java.io.IOException; import java

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

如何在两个线程完成交替运行后立即打印内容

我会在这里附上代码。文件f1和f2分别在单独的行中包含十个随机数

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();
    }
}
导入java.io.FileReader;
导入java.io.IOException;
导入java.util.Scanner;
公共类JavaTip3Thread扩展线程
{
公共线程;
静态整数a[]=新整数[10];
静态整数b[]=新整数[10];
静态整数c[]=新整数[10];
静态int指数=0;
静态布尔fin=false;
静态int-ok;
公共JavaTip3Thread()
{
线程=新线程(此);
}
公共静态int[]已读(FileReader in)
{
扫描仪s=新扫描仪(英寸);
int[]x=新的int[10];;
而(s.hasNextLine())
{
对于(int i=0;i<10;i++)
{
x[i]=s.nextInt();
}
}
s、 close();
返回x;
}
公帑
{
while(fin!=真)
{
整数和=0;
总和+=a[指数]+b[指数];
c[指数]=总和;
System.out.println(a[index]+“+”+b[index]+“=”+c[index]);
索引++;
如果(索引==a.length)
{
fin=真;
}
}
}
公开募捐
{
sum();
} 
公共静态void main(字符串args[])引发IOException
{
FileReader in=newfilereader(“D:\\IESC\\Java\\JavaTip3Thread\\src\\f1.txt”);
FileReader in2=新文件读取器(“D:\\IESC\\Java\\JavaTip3Thread\\src\\f2.txt”);
a=读取(in);
b=读取(in2);
JavaTip3ThreadT1=新的JavaTip3Thread();
JavaTip3ThreadT2=新的JavaTip3Thread();
t1.start();
t2.start();
对于(int i=0;i<10;i++)
{
System.out.println(“c[“+i+”]=“+c[i]+”);
}
in.close();
in2.close();
}
}
这将触发两个线程,然后等待第一个线程完成,然后等待第二个线程完成


HTH.

为什么您认为在一个线程上调用
join
会阻止另一个线程继续并发运行?\n我误解了join()的工作方式。我认为一旦你在一个线程上调用join(),它就会停止任何其他线程,直到它完成。它成功了,非常感谢。线程对我来说是新事物,我经常犯这样的错误。
t1.start();
t2.start();

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