gpt4 book ai didi

java - 搜索数组的一部分的多个线程

转载 作者:太空宇宙 更新时间:2023-11-04 08:21:34 25 4
gpt4 key购买 nike

我得到了以下代码,该代码创建一个大数组并找到最大值。

import java.util.Date;
import java.util.Random;

class FindMax {
private static final int N = 256 * 1024 * 1024;

public static void main(String args[]) {
assert(N > 0);

int array[] = new int [N];

assert(array != null);

Random random = new Random(new Date().getTime());

for (int i = 0; i < N; i++) {
array[i] = random.nextInt();
}

Date start = new Date();

int max = array[0];

for (int i = 1; i < N; i++) {
if (array[i] > max) {
max = array[i];
}
}

Date end = new Date();

System.out.println("max: " + max);
System.out.println("time in msec: " + (end.getTime() - start.getTime()));
}
}

我要更改代码以使其更快,方法是创建多个线程,每个线程查找数组的一部分的最大值,然后主线程查找线程找到的最大值中的最大值。这是我到目前为止想到的。

import java.util.Date;
import java.util.Random;

class FindMax extends Thread{
private static final int N = 256 * 1024 * 1024;

static int array[] = new int [N];
static int max = array[0];

public void run(){
for (int i = 1; i < N; i++) {
if (array[i] > max) {
max = array[i];
}
}

}

public static void main(String args[]) {
assert(N > 0);
int ts = Integer.parseInt(args[0]);


assert(array != null);

Random random = new Random(new Date().getTime());

for (int i = 0; i < N; i++) {
array[i] = random.nextInt();
}

Date start = new Date();

Thread t[] = new Thread[ts];
for( int p=0; p<ts;p++){
t[p] = new FindMax();
t[p].start();
}





Date end = new Date();

System.out.println("max: " + max);
System.out.println("time in msec: " + (end.getTime() - start.getTime()));
}
}

我不明白这一点,所以我做错了什么?

最佳答案

你有了一个良好的开端。接下来您需要做的就是为 FindMax 类提供两个成员变量来表示搜索范围的开始和结束。使用这两个成员变量代替 for 循环中的 1N。然后为 FindMax 提供一个构造函数,您可以使用它来设置这两个值。然后在构造 FindMax 对象的循环中,为每个对象指定一个唯一的搜索范围。最后,给FindMax一个成员变量来存储最大值,以便main()可以查询每个FindMax找到的最大值。

您可能需要使用 Thread 类的 join() 方法 - 它在返回之前等待 Thread 完成。

关于java - 搜索数组的一部分的多个线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9440424/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com