查找10个线程的最大值

漩涡11

我有一个程序可以对文本文件进行排序,并使用10个线程提取最大值。然后,我如何才能对10个线程进行排序并找到这10个线程中的最大值?我的逻辑是将每个结果存储在数组中并将该结果与前一个结果进行比较,但是我不确定如何通过线程正确实现它。我添加了这个for循环,但这是不正确的,任何帮助将不胜感激!

 for (int x = 0; max <=max; x++) {
                max = worker.getMax();
                System.out.println("Final Max " = max);
            }

这是包含上面代码的实际程序。没有这个就可以正常运行。

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

public class datafile{

    public static void main(String[] args) throws IOException {
        int[] array = new int[100000];
        int count;
        int index = 0;
        String datafile = "dataset529.txt"; //string which contains datafile
        String line; //current line of text file

        try (BufferedReader br = new BufferedReader(new FileReader(datafile))) { //reads in the datafile
            while ((line = br.readLine()) != null) { //reads through each line
                array[index++] = Integer.parseInt(line); //pulls out the number of each line and puts it in numbers[]
            }
        }



        Thread[] threads = new Thread[10];
        worker[] workers = new worker[10];


        int range = array.length / 10;
        for (count = 0; count < 10; count++) {
            int startAt = count * range;
            int endAt = startAt + range;
            workers[count] = new worker(startAt, endAt, array);

        }

        for (count = 0; count < 10; count++) {
            threads[count] = new Thread(workers[count]);
            threads[count].start();
        }

        boolean isProcessing = false;
        do {
            isProcessing = false;
            for (Thread t : threads) {
                if (t.isAlive()) {
                    isProcessing = true;
                    break;
                }
            }
        } while (isProcessing);

        for (worker worker : workers) {
            System.out.println("Max = " + worker.getMax());
        }

        for (int x = 0; max <=max; x++) {
            max = worker.getMax();
            System.out.println("Final Max " = max);
        }

    }


    public static class worker implements Runnable {

        private int startAt;
        private int endAt;
        private int randomNumbers[];

        int max = Integer.MIN_VALUE;

        public worker(int startAt, int endAt, int[] randomNumbers) {
            this.startAt = startAt;
            this.endAt = endAt;
            this.randomNumbers = randomNumbers;
        }

        @Override
        public void run() {
            for (int index = startAt; index < endAt; index++) {

                if (randomNumbers != null && randomNumbers[index] > max)
                    max = randomNumbers[index];
            }
        }

        public int getMax() {
            return max;
        }

    }
}

基本上,您的最大计算错误。这是更正的代码。

int finalMax = workers[0].getMax(); //Sets max as first worker's max

for (int x = 1; x < workers.length; x++) {
     if(finalMax < workers[x].getMax())//checks whether finalMax is less than worker's max at x'th position and if yes assigns it to finalMax         
        finalMax = workers[x].getMax();        
}

System.out.println("Final Max " + finalMax );

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

查找10个线程的最大值

来自分类Dev

在 for 循环 Python 中查找前 10 个最大值

来自分类Dev

查找局部最大值的最大4个值

来自分类Dev

查找局部最大值的最大4个值

来自分类Dev

查找另一个最大值查询的最大值

来自分类Dev

递归函数查找2个整数之间的最大值

来自分类Dev

使用mysql连续查找2个最大值

来自分类Dev

查找键的最大值

来自分类Dev

PHP-查找最大值/最大值

来自分类Dev

如何使用多线程在Java中查找二维数组的最大值

来自分类Dev

如何使用多线程在Java中查找二维数组的最大值

来自分类Dev

查找连续相似值的最大值

来自分类Dev

Excel查找值旁边的最大值

来自分类Dev

查找哈希值的键的最大值

来自分类Dev

Java 8查找最大值

来自分类Dev

查找列表的最大值(Python)

来自分类Dev

MongoDB查找并全部返回最大值

来自分类Dev

通过分组查找最大值

来自分类Dev

在C中查找char的最大值

来自分类Dev

用列表递归查找最大值

来自分类Dev

Spark Scala DataFrame查找最大值

来自分类Dev

在CUDA中查找矩阵的最大值

来自分类Dev

查找自然联接表的最大值

来自分类Dev

查找最大值,除0外

来自分类Dev

在嵌套列表中查找最大值

来自分类Dev

在列表中查找最大值

来自分类Dev

用optim()查找方程的最大值

来自分类Dev

在行中查找最大值

来自分类Dev

动态连接列以查找最大值