-
Не использовать поток
main
, как поток, который выполняет какую-то задачу/работу. -
Поток
main
является координирующим потоком, т.е. потоком где создаются другие потоки, общие ресурсы для этих потоков и т.д. -
Необходимо корректно выделить задачу/работу, которую можно выполнить в отдельном потоке.
Tip
|
Когда нескольким потокам необходимо работать с одними и теми же данными, то создается общий ресурс, доступ к которому имеют все эти потоки. |
Написать программу, бесконечно считывающую целые числа, которые пользователь вводит в Standard Input .
Когда пользователь вводит некорректные данные, то бросается собственный UserInputException
.
Числа, вводимые пользователем, представляют собой количество секунд, на которое должен заснуть thread-worker. После чего thread-worker выводит в File: ${timestamp} - I slept ${seconds} seconds
.
Все задачи, thread-worker выполняет в том порядке, в котором они были введены пользователем.
Tip
|
Если есть некоторое количество однотипных задач, то их следует выполнять параллельно. При этом возникает необходимость управления параллельным выполнением этих задач и сохранения их результата. |
Реализовать метод:
-
принимающий список массивов, состоящий из случайных целых чисел (от 1 до 300) случайной длины (до 1 млн элементов)
-
возвращающий массивы и сумму элементов в них
Реализовать метод, аналогичный предыдущему, но принимающий количество потоков, в которых будет происходить выполнение.
-
Пользователь с клавиатуры вводит путь к существующей директории и слово для поиска.
-
После чего запускаются два потока.
-
Первый должен найти файлы, содержащие искомое слово и слить их содержимое в один файл.
-
Второй поток ожидает завершения работы первого потока. После чего проводит вырезание всех запрещенных слов (список этих слов нужно считать из файла с запрещенными словами) из полученного файла.
-
-
В методе main необходимо отобразить статистику выполненных операций.