如何使用线程查找数组中的max元素?

时间:2017-11-04 16:19:11

标签: java arrays java-threads

我已经使用了一段代码,以便使用线程查找数组中的max元素。我已经成功地完成了对数组元素的求和,但我在如何找到最大值时遇到了一些问题。另外,在这种情况下,我还不知道如何使用覆盖运行方法!我显然使用Java。

public class maxUsingThread extends Thread {
    private int lo, hi;
    private int[] arr;
    private static int maxInArr;
    private static int[] maxArr;

    public maxUsingThread(int[] arr, int lo, int hi) {
        this.lo = lo;
        this.hi = hi;
        this.arr = arr;
    }

    public static int max(int[] arr) throws InterruptedException {
        int len = arr.length;
        maxUsingThread[] ts = new maxUsingThread[4];
        for (int i = 0; i < 4; i++) {
            ts[i] = new maxUsingThread(arr, (i * len) / 4, ((i + 1) * len / 4));
            ts[i].start();
        }

        maxArr = new int[4];
        int max = arr[0];
        for (int i = 0; i < 4; i++) {
            ts[i].join();
            for (int j = 1; j < len; j++) {      
                if ( max < arr[i] ){
                    max = arr[i];
                    for (int k = 0; k < 4; k++) {
                        maxArr[0] = max;

                    }
                }     
            }
        }
        maxInArr = maxArr[0];
        for (int i = 1; i < 4; i++) {
            if (maxInArr < maxArr[i]){
                maxInArr = maxArr[i];
            }   
        }
        return maxInArr;
    }

    public static void main(String[] args) throws InterruptedException {
        int[] arr = new int[100];
        for (int i = 0; i < arr.length; i++) {
            arr[i] = i;
        }
        int max = max(arr);
        System.out.println("Max: " + max);
    }
}

感谢您的帮助,谢谢。

1 个答案:

答案 0 :(得分:1)

尝试为每个线程找到最大数量,然后每个线程的最终结果比较它们并找到最终的最大数量。

选中此question,它会对您有所帮助。