Ця програма демонструє асинхронну обробку масиву чисел за допомогою потоків, ExecutorService
, Callable
, та Future
. Масив розділяється на кілька частин, кожна з яких обробляється окремим потоком, а результати об'єднуються після виконання.
-
Ініціалізація:
- Створити масив випадкових чисел у заданому діапазоні.
- Запитати у користувача множник, на який будуть помножені всі числа.
-
Розбиття масиву на частини:
- Розділити масив на рівномірні частини, щоб кожен елемент оброблявся окремим потоком.
-
Використання ExecutorService:
- Запустити обробку частин масиву асинхронно через
ExecutorService
таCallable
.
- Запустити обробку частин масиву асинхронно через
-
Об'єднання результатів:
- Використати
Future
для збору результатів обчислень.
- Використати
-
Виведення результату та час роботи програми.
-
Ініціалізація діапазону та масиву:
- Масив чисел від
-100 до 100
генерується випадковим чином. - Кількість елементів у масиві випадкова, в діапазоні від 40 до 60.
- Масив чисел від
-
Множник від користувача:
- Множник вводиться користувачем з консолі.
-
Розбиття масиву на частини:
- Масив розбивається на рівні частини, які оброблятимуться окремими потоками.
-
ExecutorService для виконання завдань:
- Кількість потоків обмежена до 4.
- Завдання поділяються на обробку асинхронно через
ExecutorService
.
-
Використання
Future
:Future.get()
збирає результати обробки.- Перевірки
isDone()
таisCancelled()
забезпечують коректність виконання.
-
CopyOnWriteArrayList:
- Використовується для потокобезпечного зберігання результатів.
-
Вимірювання часу:
- Обчислюється час між моментами запуску та завершення обробки.
- Масив обробляється асинхронно.
- Завдання обробляються паралельно через окремі потоки.
- В кінці роботи результати збираються з усіх потоків.
- Перевірки
isDone()
таisCancelled()
допомагають переконатися в коректності.