/
itokar98
/
HomeWorkMultithreadingTask2
Обзор
Документация
Войти
/
itokar98
/
HomeWorkMultithreadingTask2
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
src/Main.java
77 строк
3 KB
Ilya Tokar
Change task
29 ноя 2025, 13:04
29 ноя 2025, 13:04
da7bf35
Код
Авторство
О чём код?
import java.util.*; import java.util.concurrent.*; public class Main { public static void main(String[] args) throws InterruptedException, ExecutionException { String[] texts = new String[25]; for (int i = 0; i < texts.length; i++) { texts[i] = generateText("aab", 30_000); } long startTs = System.currentTimeMillis(); // Создаем пул потоков ExecutorService executor = Executors.newFixedThreadPool(Runtime.getRuntime().availableProcessors()); // Список для хранения Future объектов List<Future<Integer>> futures = new ArrayList<>(); // Отправляем задачи на выполнение в пул потоков (лямбда версия) for (String text : texts) { Future<Integer> future = executor.submit(() -> { int maxSize = 0; for (int i = 0; i < text.length(); i++) { for (int j = 0; j < text.length(); j++) { if (i >= j) { continue; } boolean bFound = false; for (int k = i; k < j; k++) { if (text.charAt(k) == 'b') { bFound = true; break; } } if (!bFound && maxSize < j - i) { maxSize = j - i; } } } System.out.println(text.substring(0, 100) + " -> " + maxSize); return maxSize; }); futures.add(future); } // Находим максимальный интервал среди всех строк int globalMaxSize = 0; int stringNumber = 1; for (Future<Integer> future : futures) { int currentMax = future.get(); // Блокирующий вызов - ждем результат System.out.println("Строка " + stringNumber + " имеет максимальный интервал: " + currentMax); if (currentMax > globalMaxSize) { globalMaxSize = currentMax; } stringNumber++; } executor.shutdown(); long endTs = System.currentTimeMillis(); System.out.println("\n=== РЕЗУЛЬТАТ ==="); System.out.println("Максимальный интервал среди всех 25 строк: " + globalMaxSize); System.out.println("Общее время выполнения: " + (endTs - startTs) + "ms"); } public static String generateText(String letters, int length) { Random random = new Random(); StringBuilder text = new StringBuilder(); for (int i = 0; i < length; i++) { text.append(letters.charAt(random.nextInt(letters.length()))); } return text.toString(); } }