95 |
|
* first register, then start the actions, then deregister, as in: |
96 |
|
* |
97 |
|
* <pre> {@code |
98 |
< |
* void runTasks(List<Runnable> list) { |
98 |
> |
* void runTasks(List<Runnable> tasks) { |
99 |
|
* final Phaser phaser = new Phaser(1); // "1" to register self |
100 |
|
* // create and start threads |
101 |
< |
* for (Runnable r : list) { |
101 |
> |
* for (Runnable task : tasks) { |
102 |
|
* phaser.register(); |
103 |
|
* new Thread() { |
104 |
|
* public void run() { |
105 |
|
* phaser.arriveAndAwaitAdvance(); // await all creation |
106 |
< |
* r.run(); |
106 |
> |
* task.run(); |
107 |
|
* } |
108 |
|
* }.start(); |
109 |
|
* } |
116 |
|
* for a given number of iterations is to override {@code onAdvance}: |
117 |
|
* |
118 |
|
* <pre> {@code |
119 |
< |
* void startTasks(List<Runnable> list, final int iterations) { |
119 |
> |
* void startTasks(List<Runnable> tasks, final int iterations) { |
120 |
|
* final Phaser phaser = new Phaser() { |
121 |
|
* public boolean onAdvance(int phase, int registeredParties) { |
122 |
|
* return phase >= iterations || registeredParties == 0; |
123 |
|
* } |
124 |
|
* }; |
125 |
|
* phaser.register(); |
126 |
< |
* for (Runnable r : list) { |
126 |
> |
* for (Runnable task : tasks) { |
127 |
|
* phaser.register(); |
128 |
|
* new Thread() { |
129 |
|
* public void run() { |
130 |
|
* do { |
131 |
< |
* r.run(); |
131 |
> |
* task.run(); |
132 |
|
* phaser.arriveAndAwaitAdvance(); |
133 |
|
* } while(!phaser.isTerminated(); |
134 |
|
* } |