Тема  8. Введение в многопоточное программирование

Содержание

  1. Параллельное исполнение
    1. Развитие параллельных систем
    2. Потоки и процессы
    3. Типы параллелизма
      1. Итеративный
      2. Рекурсивный
      3. Обмен сообщениями
    4. Неделимые операции
      1. Безусловные
      2. Условные
      3. Свойства планировщика
  2. Потоки
    1. Создание потоков
    2. Состояния и свойства потоков
    3. Завершение потоков
    4. Механизм прерывания

Слайды

HTML

Примеры

zip

Домашнее задание 8. Итеративный параллелизм

  1. Реализуйте класс IterativeParallelism, который будет обрабатывать списки в несколько потоков.
  2. В простом варианте должны быть реализованы следующие методы:
    • argMax(threads, list, comparator) — индекс первого максимума;
    • argMin(threads, list, comparator) — индекс первого минимума;
    • indexOf(threads, list, predicate) — индекс первого элемента, удовлетворяющего предикат;
    • lastIndexOf(threads, list, predicate) — индекс последнего элемента, удовлетворяющего предикат;
    • sumIndices(threads, list, predicate) — сумма индексов элементов, удовлетворяющих предикат;
  3. В сложном варианте должны быть дополнительно реализованы следующие методы:
    • indices(threads, list, predicate) — индексы элементов, удовлетворяющих предикат;
    • filter(threads, list, predicate) — вернуть список, содержащий элементы удовлетворяющие предикату;
    • map(threads, list, function) — вернуть список, содержащий результаты применения функции;
  4. Во все функции передается параметр threads — сколько потоков надо использовать при вычислении. Вы можете рассчитывать, что число потоков относительно мало.
  5. Не следует рассчитывать на то, что переданные компараторы, предикаты и функции работают быстро.
  6. Можно сделать O(threads), но не O(list.size()) действий без распараллеливания.
  7. При выполнении задания нельзя использовать Concurrency Utilities и Parallel Streams.

Библиография

  1.  Java Language Specification. Theads and locks
  2.  Concurrency (Java Tutorial)
  3. Lea D. Concurrent Programming in Java
  4. Goetz B. Java Concurrency in Practice
  5. Garg V. Concurrent and Distributed Computing in Java