Итак, я пытаюсь отсортировать ArrayList с помощью пула Fork / Join.Алгоритм, который я буду использовать для сортировки, не имеет значения: я просто выбрал случайный.Важно то, как я должен использовать рекурсивную задачу с пулом fork / join, чтобы ArrayList продолжал разделяться до тех пор, пока размер ArrayList не достигнет определенного числа (например, 1000), затем он выполнит сортировку и затем снова присоединится кодин ArrayList.Вот мой код:
assignment5
public class assignment5 {
ArrayList<Integer> numbers = new ArrayList<>();
//lets say this arraylist is full with random numbers
public void run(){
Instant start = Instant.now();
MyRecursiveTask myRecursiveTask = new MyRecursiveTask(numbers);
ArrayList<Integer> mergedResult = ForkJoinPool.invoke(myRecursiveTask);
Instant end = Instant.now();
Duration duration = Duration.between(start, end);
System.out.println("Seconds: " + duration.getSeconds());
}
}
здесь в назначении 5 выдает ошибку на ForkJoinPool.invoke(myRecursiveTask);
он говорит, что вызов статического метода не может быть связан со статическим контентом
MyRecursiveTask
private List<Integer> numbers;
protected List<Integer> compute() {
//numbers here is the same as in assignment 5
//if work is above threshold, break tasks up into smaller tasks
if(this.numbers.size() > 1000) {
System.out.println("Splitting workLoad : " + this.numbers.size());
List<MyRecursiveTask> subtasks = new ArrayList<MyRecursiveTask>();
subtasks.addAll(createSubtasks());
for(MyRecursiveTask subtask : subtasks){
subtask.fork();
}
for(MyRecursiveTask subtask : subtasks) {
subtask.join();
}
return numbers;
} else {
System.out.println("Doing workLoad myself: " + this.numbers.size());
bubbleSort(numbers);
}
return numbers;
}
private List<MyRecursiveTask> createSubtasks() {
List<MyRecursiveTask> subtasks = new ArrayList<MyRecursiveTask>();
List<Integer> list1 = numbers.subList(0,numbers.size()/2);
List<Integer> list2 = numbers.subList(numbers.size()/2, numbers.size());
MyRecursiveTask subtask1 = new MyRecursiveTask(list1);
MyRecursiveTask subtask2 = new MyRecursiveTask(list2);
subtasks.add(subtask1);
subtasks.add(subtask2);
return subtasks;
}
public void bubbleSort(List<Integer> numbers){//bubble sort alg here}
}