使用10个并行线程查找数组中的最大值

时间:2015-10-26 20:35:06

标签: java arrays multithreading io

我对Java和编程很新,所以我在这里遇到了一些困难。

我目前正在尝试采用我在几周前工作的程序并对其应用线程功能。我想让我的Java程序读取一个名为' dataset529.txt'的文本文件。 (其中包含10万个数字)并使用10个并行线程执行此操作。我希望它读取文件并告诉我其中的最大数字,但是使用10个线程。我最初尝试为线程使用循环,但现在我单独定义每个线程,如thread1,thread2等。

现在我正在尝试如何做到这一点。我不确定我是否走在正确的轨道上。

这是我到目前为止所拥有的

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;

public class ProcessDataFileParallel extends Thread implements Runnable{
public void ReadText() throws IOException{
    String emptyString;
    FileReader fr = new FileReader("dataset529.txt");
    BufferedReader br = new BufferedReader(fr);
    emptyString = br.readLine();

    int max = Integer.MIN_VALUE;
    int i = 0;
    int[] randomNumbers = new int [100000];

    while ((emptyString = br.readLine()) != null) {
        randomNumbers[i++] = Integer.parseInt(emptyString);   
    }
    for (i = 0; i < randomNumbers.length; i++)
        if (randomNumbers[i] > max)       
            max = randomNumbers[i];
    System.out.println("The Largest Number from 'CreateDataFile's' array is : "+ max);


}


 public static void main (String[] args) throws IOException {

    Thread thread1 = new Thread(){
        public void run(){
        ProcessDataFileParallel PDF = new ProcessDataFileParallel();
        try{
            PDF.ReadText();
        }catch (IOException e){
            e.printStackTrace();
        }
    }

};
Thread thread2 = new Thread(){
    public void run(){
        ProcessDataFileParallel PDF = new ProcessDataFileParallel();
        try{
            PDF.ReadText();
        }catch (IOException e){
            e.printStackTrace();
        }
    }
};

thread1.start();
thread2.start();
 }
}

到目前为止,我只有两个主题。我希望两个线程都能读取文本文件并告诉我它认为该文本文件中最大的数字。我认为当我有多个线程同时工作时,它可能会给我不同的结果。

任何帮助将不胜感激。感谢

1 个答案:

答案 0 :(得分:1)

两个线程都在读取整个文件,因此它们都执行相同的完整计算。您可能希望每个线程只读取文件的一部分,或者一个线程读取文件并将计算委托给其他线程并收集它们的结果(即计算所有线程返回的最大值)。 / p>