1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79
|
import java.util.Random;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
public class SearchParallel {
int[] array;
Random r;
int x, index = -1;
ExecutorService pool;
public SearchParallel(int length, int x) {
this.x = x;
pool = Executors.newCachedThreadPool();
array = new int[length];
r = new Random();
for (int i = 0; i < array.length; i++) {
array[i] = r.nextInt(length);
}
}
class Worker implements Runnable {
int start, end;
public Worker(int start, int end) {
this.start = start;
this.end = end;
}
@Override
public void run() {
while (index == -1 && start < end) {
if (array[start] != x) {
start++;
} else {
index = start;
System.out.println(Thread.currentThread().getName());
}
}
}
}
void display() {
for (int i : array) {
System.out.print(i + " ");
}
System.out.println();
}
void go(int n) {
for (int k = 0; k < n; k++) {
Worker w = new Worker(k * array.length / n, (k + 1) * array.length / n);
pool.execute(w);
}
pool.shutdown();
while (index == -1 && !pool.isTerminated()) {
}
if (index != -1) {
System.out.println("item " + x + " is found at index " + index);
} else {
System.out.println("item " + x + "is not found");
}
}
public static void main(String[] args) {
int nbrTask = 10;
SearchParallel sp = new SearchParallel(100, 4);
sp.display();
sp.go(nbrTask);
}
} |
Partager