我有以下Java代码:
import java.io.*;
class Global{
public static int a = 0 ;
public static int b = 0 ;
}
public class Example{
public static void main(String args[]) {
    try {
        FileOutputStream fos = new FileOutputStream("1.dat");
        DataOutputStream dos = new DataOutputStream(fos);
        for (int i = 0; i < 20000; i++) {
            dos.writeInt(i);
        }
        dos.close();
        FileOutputStream fos1 = new FileOutputStream("2.dat");
        DataOutputStream dos1 = new DataOutputStream(fos1);
        for (int i = 20000; i < 40000; i++) {
            dos1.writeInt(i);
        }
        dos1.close();
        Exampless.createArray(20000); //static method call to set the static arr variable
        Exampless ex1 = new Exampless("1.dat"); //found number of matches in file
        Exampless ex2 = new Exampless("2.dat");
        Thread t1 = new Thread(ex1);
        Thread t2 = new Thread(ex2);
        t1.start();
        t1.join();
        t2.start();
        t2.join();
        System.out.println("No. of Matches: " + (Global.a + Global.b ));
    } catch (Exception e) {
        System.err.println("Error: " + e.getMessage());
    }
}
}
class Exampless implements Runnable {
public static int[] arr = new int[20000];
public String _name;
public Exampless(String name) {
    this._name = name;
}
static void createArray(int z) {
    for (int i = z; i < z + 20000; i++) {
        arr[i - z] = i;
    }
}
public void run() {
    try {
        int cnt = 0;
        FileInputStream fin = new FileInputStream(_name);
        DataInputStream din = new DataInputStream(fin);
        for (int i = 0; i < 20000; i++) {
            int c = din.readInt();
            if (c == arr[i]) {
                cnt++;
            }
        }
        System.out.println("File name: " + _name + " No. of Matches: " + cnt);
        if(_name == "1.dat")
            Global.a = cnt ;
        else if(_name == "2.dat")
            Global.b = cnt ;
    } catch (Exception e) {
        System.err.println("Error: " + e.getMessage());
    }
}
}
我正在尝试run并行运行示例类方法。但是,我想让主线程等到子线程完成,我已经使用join. 但是,它使线程一个接一个地执行。谁能帮我解决这个问题?另一点是,我想在我使用 Global 类完成的两个线程之间共享一个变量(命名为 cnt,它在文件中找到了匹配的数量)来找到匹配的总数。还有其他好的解决方案吗?