Содержание
- Синхронизация и блокировки
- Синхронизация
- Неявные блокировки
- Активное ожидания
- Мониторы и условия
- Мониторы
- Условия и работа с ними
- Пассивное ожидание
- Внезапные пробуждения
- Модель памяти Java
- Атомарность операций
- Видимость изменений и барьеры
- Упорядоченность изменений
- Volatile-переменные
- Примеры многопоточных программ
- Двусторонний барьер
- Гарантированный тупик
- Уровни безопасности
- Неизменяемые объекты
- Потокобезопасные объекты
- Потоконебезопасные объекты
- Thread-local objects
Примеры
zipДомашнее задание 9. Параллельный запуск
-
Напишите класс
ParallelMapperImpl, реализующий интерфейсParallelMapper.public interface ParallelMapper extends AutoCloseable { <T, R> List<R> map( Function<? super T, ? extends R> f, List<? extends T> args ) throws InterruptedException; @Override void close(); }-
Метод
mapдолжен параллельно вычислять функциюfна каждом из указанных аргументов (args). -
Конструктор
ParallelMapperImpl(int threads)должен создаватьthreadsрабочих потоков, которые используются для распараллеливания. -
Метод
closeдолжен останавливать все рабочие потоки. -
К одному
ParallelMapperImplмогут одновременно обращаться несколько клиентов. - При недостатке потоков для распараллеливания, задания на исполнение должны накапливаться в очереди и обрабатываться в порядке поступления.
- В реализации не должно быть активных ожиданий.
- Код должен находиться в пакете
iterative. -
Обратите внимание на обработку исключений,
кидаемых функцией
f.- Исключения не должны приводить к сокращению числа рабочих потоков.
- Сложный вариант.
Исключения должны выкидываться из метода
map.
-
Метод
-
Доработайте класс
IterativeParallelismтак, чтобы он мог использоватьParallelMapper.-
Добавьте конструктор
IterativeParallelism(ParallelMapper). -
Методы класса должны делить работу на
threadsфрагментов и исполнять их при помощиParallelMapper. -
При наличии
ParallelMapperсамIterativeParallelismновые потоки создавать не должен. -
Должна быть возможность одновременного запуска и работы
нескольких клиентов, использующих один
ParallelMapper.
-
Добавьте конструктор
- При выполнении задания всё ещё нельзя использовать Concurrency Utilities и Parallel Streams.
Библиография
- Java Language Specification. Theads and locks
- Concurrency (Java Tutorial)
- Lea D. Concurrent Programming in Java
- Goetz B. Java Concurrency in Practice
- Garg V. Concurrent and Distributed Computing in Java