Завдання: Виконавці
Завдання
Уявіть, що у вас є список файлів, кожен з яких містить рядки тексту. Ваше завдання — зчитувати рядки з цих файлів паралельно та підраховувати кількість слів у кожному рядку. Для виконання завдання використовуйте ExecutorService, Future та пул потоків.
Вимоги:
-
Створення пулу потоків: Створити пул потоків фіксованого розміру за допомогою
Executors.newFixedThreadPool(int nThreads), деnThreads— кількість потоків у пулі; -
Реалізація завдання: Реалізувати клас
WordCountTask, який імплементує інтерфейсCallable<String>і приймає файл як вхідний параметр. У методі call цього класу зчитувати рядки з файлу, підраховувати кількість слів у кожному рядку та повертати результат; -
Використання
ExecutorService: За допомогоюExecutorServiceнадсилати завдання до пулу потоків для виконання. Завдання мають використовувати класWordCountTask.
Також рядок, який ви формуєте в окремому потоці, необхідно повернути та використати метод get() інтерфейсу Future, щоб отримати результат виконання потоку та вивести його у консоль у методі main.
Зчитування з файлу
Для реалізації call() можна використовувати BufferedReader для зчитування рядків з файлів. Використовуйте блок try-with-resources, щоб ресурси автоматично закривалися.
Main.java
1BufferedReader reader = new BufferedReader(new FileReader(file));
Використовуйте метод readLine() для зчитування кожного рядка та обов'язково перевіряйте на null, щоб визначити, коли досягнуто кінця файлу.
Далі розділіть рядок на масив рядків за допомогою методу split("\\s+") з патерном \\s+, який розділяє рядок за пробілами, а потім отримайте розмір масиву.
У самому рядку, який повертає потік, використовуйте це форматування
Main.java
1String.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
Дякуємо за ваш відгук!
Запитати АІ
Запитати АІ
Запитайте про що завгодно або спробуйте одне із запропонованих запитань, щоб почати наш чат
Can you show me how to implement the WordCountTask class?
How do I use ExecutorService to run the WordCountTask for multiple files?
Can you explain how to format the output for each line as shown in the example?
Awesome!
Completion rate improved to 3.33
Завдання: Виконавці
Свайпніть щоб показати меню
Завдання
Уявіть, що у вас є список файлів, кожен з яких містить рядки тексту. Ваше завдання — зчитувати рядки з цих файлів паралельно та підраховувати кількість слів у кожному рядку. Для виконання завдання використовуйте ExecutorService, Future та пул потоків.
Вимоги:
-
Створення пулу потоків: Створити пул потоків фіксованого розміру за допомогою
Executors.newFixedThreadPool(int nThreads), деnThreads— кількість потоків у пулі; -
Реалізація завдання: Реалізувати клас
WordCountTask, який імплементує інтерфейсCallable<String>і приймає файл як вхідний параметр. У методі call цього класу зчитувати рядки з файлу, підраховувати кількість слів у кожному рядку та повертати результат; -
Використання
ExecutorService: За допомогоюExecutorServiceнадсилати завдання до пулу потоків для виконання. Завдання мають використовувати класWordCountTask.
Також рядок, який ви формуєте в окремому потоці, необхідно повернути та використати метод get() інтерфейсу Future, щоб отримати результат виконання потоку та вивести його у консоль у методі main.
Зчитування з файлу
Для реалізації call() можна використовувати BufferedReader для зчитування рядків з файлів. Використовуйте блок try-with-resources, щоб ресурси автоматично закривалися.
Main.java
1BufferedReader reader = new BufferedReader(new FileReader(file));
Використовуйте метод readLine() для зчитування кожного рядка та обов'язково перевіряйте на null, щоб визначити, коли досягнуто кінця файлу.
Далі розділіть рядок на масив рядків за допомогою методу split("\\s+") з патерном \\s+, який розділяє рядок за пробілами, а потім отримайте розмір масиву.
У самому рядку, який повертає потік, використовуйте це форматування
Main.java
1String.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
Дякуємо за ваш відгук!