Содержание
- Синхронизация и блокировки
- Синхронизация
- Неявные блокировки
- Активное ожидания
- Мониторы и условия
- Мониторы
- Условия и работа с ними
- Пассивное ожидание
- Внезапные пробуждения
- Модель памяти Java
- Атомарность операций
- Видимость изменений и барьеры
- Упорядоченность изменений
- Volatile-переменные
- Примеры многопоточных программ
- Двусторонний барьер
- Гарантированный тупик
- Уровни безопасности
- Неизменяемые объекты
- Потокобезопасные объекты
- Потоконебезопасные объекты
- Thread-local objects
Примеры
zipДомашнее задание 8. Параллельный запуск
-
Напишите класс
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
). -
Метод
close
должен останавливать все рабочие потоки. -
Конструктор
ParallelMapperImpl(int threads)
создаетthreads
рабочих потоков, которые должны быть использованы для распараллеливания. -
К одному
ParallelMapperImpl
могут одновременно обращаться несколько клиентов. - Задания на исполнение должны накапливаться в очереди и обрабатываться в порядке поступления.
- В реализации не должно быть активных ожиданий.
-
Метод
-
Доработайте класс
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