public class Solution {
public static int threadCount = 10;
public static int[] testArray = new int[1000];
public static class SortThread extends Thread{
@Override
public void run() {
sort(testArray);
}
}
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;
}
}
}
}
}
Anutka Revega
23 уровень
Помогите разобрать что делает программа. Задачу решила чисто по условию. Чем дальше тем тяжелее
Обсуждается
Комментарии (5)
- популярные
- новые
- старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
Денис
14 июня 2020, 20:38
Добрый день.
Программа изначально имеет массив
public static int[] testArray = new int[1000];
В статическом блоке инициализируется этот самый массив по средствам цикла for. Массиву присваиваются значения от 0 до 999 по возрастанию.
В методе main объявляется и инициализируется StringBuffer
StringBuffer expectedResult = new StringBuffer();
for (int i = 1000 - 1; i >= 0; i--) {
expectedResult.append(i).append(" ");
}
он заполняется символами от 999 до 0 через пробел.
далее initThreads();
Тут создается список
List<Thread> threads = new ArrayList<Thread>(threadCount);
и заполняется объектами созданного нами класса SortThread.
Далее с помощью цикла все потоки(нити) стартуют.
Далее с помощью цикла программа запускает ожидание окончания работы всех потоков(нитей).
В методу run нашего класса есть команда на сортировку массива. И идея в том, что запущенные разом потоки и направленные на сортировку одного массива всем скопом, вроде бы должны сделать это быстро. Но на самом деле нет, так как все потоки обращаются к одному массиву и их действия мешают друг другу. Получается белиберда с производительностью и пробелы с корректностью конечного результата. По идеи программы сортировка массива testarray должна перевернуть его в обратном направлении от 999 до 0.
Создается еще один StringBuffer
StringBuffer result = new StringBuffer();
заполняется символами от значений массива testarray от индекса i через пробел.
Далее происходит сравнение строк и вывод результата логической операции в консоль.
Ну вот вроде и все)) Если я что-то не так сказал, лопатой не бейте, я только учусь))
+17
MR
5 июля 2020, 15:59
Зачем же вас лопатой бить, так легко и понятно всё объяснили. Спасибо вам)))
+1
MR
5 июля 2020, 16:02
Единственное, что ещё хочется понять, зачем там создавался ещё один StringBuffer(), заполненный совсем другим порядком чисел, но на консоль не выводился? Просто завихрень придумки разрабов? И зачем сравнивали? Просто любопытствую.
0
MR
5 июля 2020, 16:08
Ааа, чёрт, вот в очередной раз убедилась, что даже если озвучиваешь глупейший вопрос (хотя мне так не казалось пару секунд назад, лол), но очень подробно и четко его расписываешь, то после доходишь до ответа.
там сначала создали стрингБаффер (оч лень менять раскладку, соррян), который забили от 999 до 0, потом создали нити, в количестве 10 штук, если не ошибаюсь, которые хаотично погнались сортировать тот самый массив с 1000 элементами, а после создали ещё один странгБаффер, который была заполнен отсортированным десятком нитей массивом и назвался он не "ожидаемый результат", а "жестокая реальность" и теперь понятно, почему создали. зачем сравнили.
Хоспадя, моя невнимательность, создает поверхностность и делает меня невдумчивой
+2
MR
5 июля 2020, 16:09
Как я задачу решила-то...*facepalm*
0