ParallelTask class
Пакет: com.hypixel.hytale.component.task
Файл: com/hypixel/hytale/component/task/ParallelTask.java
extends: CountedCompleter<Void>
Поля (1)
| Модификаторы | Тип | Имя |
|---|---|---|
final |
Supplier<D> |
supplier |
Методы (15)
| Модификаторы | Возврат | Сигнатура |
|---|---|---|
abstract |
throw new |
IllegalStateExceptionthrow new IllegalStateException("Parallel task has already been started") |
public |
ParallelRangeTask<D> |
appendTaskParallelRangeTask<D> appendTask() |
public |
void |
doInvokevoid doInvoke() |
|
|
for for(int var1 = this.size; var1 < this.subTasks.length; var1++) |
|
|
for for(int var1 = 0; var1 < this.size - 1; var1++) |
|
|
for for(int var1 = 0; var1 < this.size; var1++) |
|
|
for for(int var2 = 0; var2 < this.size; var2++) |
public |
ParallelRangeTask<D> |
getParallelRangeTask<D> get(int var1) |
|
|
if if(this.running) |
|
|
if if(this.running) |
|
|
if if(this.subTasks.length <= this.size) |
public |
void |
initvoid init() |
public |
int |
sizeint size() |
abstract |
|
super super(var1) |
abstract |
|
this this(null, var1) |
Исходный код
Показать/скрыть
class="kw">package com.hypixel.hytale.component.task;
class="kw">import com.hypixel.hytale.common.util.ArrayUtil;
class="kw">import java.util.Arrays;
class="kw">import java.util.concurrent.CountedCompleter;
class="kw">import java.util.function.IntConsumer;
class="kw">import java.util.function.Supplier;
class="kw">import javax.annotation.Nonnull;
class="kw">public class ParallelTask<D class="kw">extends IntConsumer> class="kw">extends CountedCompleter<Void> {
class="kw">private class="kw">final Supplier<D> supplier;
@Nonnull
class="kw">private ParallelRangeTask<D>[] subTasks = new ParallelRangeTask[0];
class="kw">private int size;
class="kw">private class="kw">volatile boolean running;
class="kw">public ParallelTask(Supplier<D> var1) {
this(null, var1);
}
class="kw">public ParallelTask(CountedCompleter<?> var1, Supplier<D> var2) {
super(var1);
this.supplier = var2;
}
@Override
class="kw">public void reinitialize() {
if (this.running) {
throw new IllegalStateException("Parallel task has already been started");
}
super.reinitialize();
}
class="kw">public void init() {
this.reinitialize();
this.size = 0;
}
class="kw">public ParallelRangeTask<D> appendTask() {
if (this.running) {
throw new IllegalStateException("Parallel task has already been started");
}
if (this.subTasks.length <= this.size) {
this.subTasks = Arrays.copyOf(this.subTasks, ArrayUtil.grow(this.size));
for (int var1 = this.size; var1 < this.subTasks.length; var1++) {
this.subTasks[var1] = new ParallelRangeTask<>(this, this.supplier);
}
}
class="kw">return this.subTasks[this.size++];
}
class="kw">public int size() {
class="kw">return this.size;
}
class="kw">public ParallelRangeTask<D> get(int var1) {
class="kw">return this.subTasks[var1];
}
@Override
class="kw">public void compute() {
this.setPendingCount(this.size - 1);
for (int var1 = 0; var1 < this.size - 1; var1++) {
this.subTasks[var1].fork();
}
this.subTasks[this.size - 1].compute();
}
class="kw">public void doInvoke() {
this.running = true;
for (int var1 = 0; var1 < this.size; var1++) {
this.subTasks[var1].running = true;
}
this.invoke();
for (int var2 = 0; var2 < this.size; var2++) {
this.subTasks[var2].running = false;
}
this.running = false;
}
}