[英]multiple threads that search a section of an array
我得到以下代碼,該代碼使一個大數組並找到該最大值。
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
循環中使用這兩個成員變量代替1
和N
然后給FindMax
一個構造函數,您可以用它來設置兩個值。 然后在構造FindMax
對象的循環中,為每個對象指定一個唯一的范圍進行搜索。 最后,給FindMax
一個成員變量來存儲最大值,以便main()
可以查詢每個FindMax
找到的FindMax
。
您可能要使用Thread
類的join()
方法-它等待Thread
完成后再返回。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.