Содержание
- Синхронизация и блокировки
- Синхронизация
- Неявные блокировки
- Активное ожидания
- Мониторы и условия
- Мониторы
- Условия и работа с ними
- Пассивное ожидание
- Внезапные пробуждения
- Модель памяти 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