큰 배열을 만들고 최대 값을 찾는 다음 코드가 제공됩니다.배열 섹션을 검색하는 다중 스레드
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')이 어떤 식 으로든 스레드 안전하지 않습니다. –
숙제 가정합니까? – Jivings