public class Sorter implements Runnable
1: import java.util.*;
2: import java.util.concurrent.*;
4: /**
5: This runnable executes a sort algorithm.
6: When two elements are compared, the algorithm
7: pauses and updates a panel.
8: */
9: public class Sorter implements Runnable
10: {
11: public Sorter(Double[] values, ArrayComponent panel, BlockingQueue<String> queue)
12: {
13: this.values = values;
14: this.panel = panel;
15: this.queue = queue;
16: }
18: public void run()
19: {
20: Comparator<Double> comp = new
21: Comparator<Double>()
22: {
23: public int compare(Double d1, Double d2)
24: {
25: try
26: {
27: String command = queue.take();
28: if (command.equals("Run"))
29: {
30: Thread.sleep(DELAY);
31: if (!"Step".equals(queue.peek()))
32: queue.add("Run");
33: }
34: }
35: catch (InterruptedException exception)
36: {
37: Thread.currentThread().interrupt();
38: }
39: panel.setValues(values, d1, d2);
40: return d1.compareTo(d2);
41: }
42: };
43: MergeSorter.sort(values, comp);
44: panel.setValues(values, null, null);
45: }
47: private Double[] values;
48: private ArrayComponent panel;
49: private BlockingQueue<String> queue;
50: private static final int DELAY = 100;
51: }