| 12
 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