-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathEliminationArray.java
More file actions
32 lines (28 loc) · 918 Bytes
/
EliminationArray.java
File metadata and controls
32 lines (28 loc) · 918 Bytes
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
import java.util.*;
import java.util.concurrent.*;
// Elimination array provides a list of exchangers which
// are picked at random for a given value.
class EliminationArray<T> {
Exchanger<T>[] exchangers;
final long TIMEOUT;
final TimeUnit UNIT;
Random random;
// exchangers: array of exchangers
// TIMEOUT: exchange timeout number
// UNIT: exchange timeout unit
// random: random number generator
@SuppressWarnings("unchecked")
public EliminationArray(int capacity, long timeout, TimeUnit unit) {
exchangers = new Exchanger[capacity];
for (int i=0; i<capacity; i++)
exchangers[i] = new Exchanger<>();
random = new Random();
TIMEOUT = timeout;
UNIT = unit;
}
// 1. Try exchanging value on a random exchanger.
public T visit(T x) throws TimeoutException {
int i = random.nextInt(exchangers.length);
return exchangers[i].exchange(x, TIMEOUT, UNIT);
}
}