|
| 1 | +// concurrent/QuittingCompletable.java |
| 2 | +// (c)2017 MindView LLC: see Copyright.txt |
| 3 | +// We make no guarantees that this code is fit for any purpose. |
| 4 | +// Visit http://OnJava8.com for more book information. |
| 5 | +import java.util.*; |
| 6 | +import java.util.stream.*; |
| 7 | +import java.util.concurrent.*; |
| 8 | +import onjava.Nap; |
| 9 | + |
| 10 | +public class QuittingCompletable { |
| 11 | + public static void main(String[] args) { |
| 12 | + List<QuittableTask> tasks = |
| 13 | + IntStream.range(1, QuittingTasks.COUNT) |
| 14 | + .mapToObj(QuittableTask::new) |
| 15 | + .collect(Collectors.toList()); |
| 16 | + List<CompletableFuture<Void>> cfutures = |
| 17 | + tasks.stream() |
| 18 | + .map(CompletableFuture::runAsync) |
| 19 | + .collect(Collectors.toList()); |
| 20 | + new Nap(1000); |
| 21 | + tasks.forEach(QuittableTask::quit); |
| 22 | + cfutures.forEach(CompletableFuture::join); |
| 23 | + } |
| 24 | +} |
| 25 | +/* Output: |
| 26 | +125 148 115 127 120 118 106 140 77 119 97 80 143 17 92 147 |
| 27 | +89 123 16 12 138 25 13 101 135 96 76 73 130 133 37 132 134 |
| 28 | +149 137 122 29 49 60 40 142 131 53 1 98 145 126 65 5 64 82 |
| 29 | +79 68 86 141 61 128 22 7 26 19 139 114 146 14 15 43 34 10 |
| 30 | +75 87 90 31 47 38 62 18 63 41 42 144 66 23 6 4 91 70 83 102 |
| 31 | +103 54 69 74 56 71 94 88 78 81 57 52 93 45 48 44 32 28 36 |
| 32 | +33 104 105 112 109 100 117 24 108 21 116 20 9 85 8 84 72 |
| 33 | +107 113 121 124 136 129 99 95 55 3 27 2 59 67 50 58 51 39 |
| 34 | +30 35 46 110 111 11 |
| 35 | +*/ |
0 commit comments