import java.util.ArrayList;
import java.util.List;

/*
Вместе быстрее? Ща проверим :)
*/

public class Solution {
    public static int threadCount = 10;
    public static int[] testArray = new int[1000];

    static {
        for (int i = 0; i < Solution.testArray.length; i++) {
            testArray[i] = i;
        }
    }

    public static void main(String[] args) throws InterruptedException {
        StringBuffer expectedResult = new StringBuffer();
        for (int i = 1000 - 1; i >= 0; i--) {
            expectedResult.append(i).append(" ");
        }

        initThreads();

        StringBuffer result = new StringBuffer();
        for (int i = 0; i < testArray.length; i++) {
            result.append(testArray[i]).append(" ");
        }
        System.out.println(result);
        System.out.println((result.toString()).equals(expectedResult.toString()));
    }

    public static void initThreads() throws InterruptedException {
        List<Thread> threads = new ArrayList<Thread>(threadCount);
        for (int i = 0; i < threadCount; i++) threads.add(new SortThread());
        for (Thread thread : threads) thread.start();
        for (Thread thread : threads) thread.join();
    }

    public static void sort(int[] array) {
        for (int i = 0; i < array.length - 1; i++) {
            for (int j = i + 1; j < array.length; j++) {
                if (array[i] < array[j]) {
                    int k = array[i];
                    array[i] = array[j];
                    array[j] = k;
                }
            }
        }
    }
    public static class SortThread extends Thread{
        @Override
        public void run() {
            Solution.sort(testArray);
        }
    }
}
Задачу решил! Но не понимаю, почему происходит изменение значения в result, мы ведь по идее создаем отдельную нить как объект в которой те же переменные экземпляра, методы и эти объекты выполняют свой run в своём потоке, каким образом он повлиял на работу остальных нитей и их переменные ? Я конечно может мыслю неправильно, но как я понимаю данную программу: 1. в методе main прогоняется цикл с значениями от 0-999 2. далее запускается метод initThreads() в котором происходит добавление нитей SortThread в коллекцию threads и далее запуск нитей, после которых идет join, то есть я как понял, происходит "наслаждение" нитей от метода main, то есть main отдыхает, пока выполняются нити из коллекции. 3. в самой же дочерней нити происходит сортировка значений походу дела "пузырьком" в коллекции testArray. 4. дальше мы передав в result значения каждой ячейки из коллекции testArray передаем на вывод в sout, после проверяем через equals сравнивая значения из result c expectedResult. но почему значения в цикле не идут по порядку, а в разброс,некоторые наоборот еще повторяются, некоторые пропускают значения, у нас ведь 10 отдельных нитей, которые выполняют свои методы в своих новых объектах new SortThread. Не кидайтесь помидорами только, тема многопоточности даётся непросто...