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

Содержание

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

Слайды

HTML

Примеры

zip

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

  1. Реализуйте класс IterativeParallelism, который будет обрабатывать списки в несколько потоков.
  2. В простом варианте должны быть реализованы следующие методы:
    • minimum(threads, list, comparator) — первый минимум;
    • maximum(threads, list, comparator) — первый максимум;
    • all(threads, list, predicate) — проверка, что все элементы списка, удовлетворяют предикату;
    • any(threads, list, predicate) — проверка, что существует элемент списка, удовлетворяющий предикату.
    • count(threads, list, predicate) — подсчёт числа элементов списка, удовлетворяющих предикату.
  3. В сложном варианте должны быть дополнительно реализованы следующие методы:
    • filter(threads, list, predicate) — вернуть список, содержащий элементы удовлетворяющие предикату;
    • map(threads, list, function) — вернуть список, содержащий результаты применения функции;
    • join(threads, list) — конкатенация строковых представлений элементов списка.
  4. Во все функции передается параметр threads — сколько потоков надо использовать при вычислении. Вы можете рассчитывать, что число потоков относительно мало.
  5. Не следует рассчитывать на то, что переданные компараторы, предикаты и функции работают быстро.
  6. При выполнении задания нельзя использовать 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