Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Вивчайте Завдання: Виконавці | Механізми Синхронізації Високого Рівня
Багатопотоковість у Java

bookЗавдання: Виконавці

Завдання

Уявіть, що у вас є список файлів, кожен з яких містить рядки тексту. Ваше завдання — зчитувати рядки з цих файлів паралельно та підраховувати кількість слів у кожному рядку. Для виконання завдання використовуйте ExecutorService, Future та пул потоків.

Вимоги:

  • Створення пулу потоків: Створити пул потоків фіксованого розміру за допомогою Executors.newFixedThreadPool(int nThreads), де nThreads — кількість потоків у пулі;

  • Реалізація завдання: Реалізувати клас WordCountTask, який імплементує інтерфейс Callable<String> і приймає файл як вхідний параметр. У методі call цього класу зчитувати рядки з файлу, підраховувати кількість слів у кожному рядку та повертати результат;

  • Використання ExecutorService: За допомогою ExecutorService надсилати завдання до пулу потоків для виконання. Завдання мають використовувати клас WordCountTask.

Note
Примітка

Також рядок, який ви формуєте в окремому потоці, необхідно повернути та використати метод get() інтерфейсу Future, щоб отримати результат виконання потоку та вивести його у консоль у методі main.

Зчитування з файлу

Для реалізації call() можна використовувати BufferedReader для зчитування рядків з файлів. Використовуйте блок try-with-resources, щоб ресурси автоматично закривалися.

Main.java

Main.java

copy
1
BufferedReader reader = new BufferedReader(new FileReader(file));

Використовуйте метод readLine() для зчитування кожного рядка та обов'язково перевіряйте на null, щоб визначити, коли досягнуто кінця файлу.

Далі розділіть рядок на масив рядків за допомогою методу split("\\s+") з патерном \\s+, який розділяє рядок за пробілами, а потім отримайте розмір масиву.

У самому рядку, який повертає потік, використовуйте це форматування

Main.java

Main.java

copy
1
String.format("File: %s | Line: %s | Word Count %d", fileName, line, countWord)

Файли вже знаходяться у проєкті, вам не потрібно їх створювати або змінювати!

Приклад виводу

File: file1.txt | Line: Hello | Word Count: 1

File: file2.txt | Line: Hello I Love Java | Word Count: 4
File: file2.txt | Line: Lol Hello | Word Count: 2

File: file3.txt | Line: Java so so so so very nice | Word Count: 7
Все було зрозуміло?

Як ми можемо покращити це?

Дякуємо за ваш відгук!

Секція 3. Розділ 7

Запитати АІ

expand

Запитати АІ

ChatGPT

Запитайте про що завгодно або спробуйте одне із запропонованих запитань, щоб почати наш чат

Awesome!

Completion rate improved to 3.33

bookЗавдання: Виконавці

Свайпніть щоб показати меню

Завдання

Уявіть, що у вас є список файлів, кожен з яких містить рядки тексту. Ваше завдання — зчитувати рядки з цих файлів паралельно та підраховувати кількість слів у кожному рядку. Для виконання завдання використовуйте ExecutorService, Future та пул потоків.

Вимоги:

  • Створення пулу потоків: Створити пул потоків фіксованого розміру за допомогою Executors.newFixedThreadPool(int nThreads), де nThreads — кількість потоків у пулі;

  • Реалізація завдання: Реалізувати клас WordCountTask, який імплементує інтерфейс Callable<String> і приймає файл як вхідний параметр. У методі call цього класу зчитувати рядки з файлу, підраховувати кількість слів у кожному рядку та повертати результат;

  • Використання ExecutorService: За допомогою ExecutorService надсилати завдання до пулу потоків для виконання. Завдання мають використовувати клас WordCountTask.

Note
Примітка

Також рядок, який ви формуєте в окремому потоці, необхідно повернути та використати метод get() інтерфейсу Future, щоб отримати результат виконання потоку та вивести його у консоль у методі main.

Зчитування з файлу

Для реалізації call() можна використовувати BufferedReader для зчитування рядків з файлів. Використовуйте блок try-with-resources, щоб ресурси автоматично закривалися.

Main.java

Main.java

copy
1
BufferedReader reader = new BufferedReader(new FileReader(file));

Використовуйте метод readLine() для зчитування кожного рядка та обов'язково перевіряйте на null, щоб визначити, коли досягнуто кінця файлу.

Далі розділіть рядок на масив рядків за допомогою методу split("\\s+") з патерном \\s+, який розділяє рядок за пробілами, а потім отримайте розмір масиву.

У самому рядку, який повертає потік, використовуйте це форматування

Main.java

Main.java

copy
1
String.format("File: %s | Line: %s | Word Count %d", fileName, line, countWord)

Файли вже знаходяться у проєкті, вам не потрібно їх створювати або змінювати!

Приклад виводу

File: file1.txt | Line: Hello | Word Count: 1

File: file2.txt | Line: Hello I Love Java | Word Count: 4
File: file2.txt | Line: Lol Hello | Word Count: 2

File: file3.txt | Line: Java so so so so very nice | Word Count: 7
Все було зрозуміло?

Як ми можемо покращити це?

Дякуємо за ваш відгук!

Секція 3. Розділ 7
some-alt