我給出了以下代碼,該代碼會生成一個大數組並找到最大值。搜索數組的一部分的多個線程
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()));
}
}
我不理解這個,所以我做錯了什麼?
你並不是每個線程都在數組的一部分上運行,結果集('array')也沒有以任何方式進行線程安全。 – 2012-02-25 01:55:42
我假設的作業? – Jivings 2012-02-25 02:07:28