Эволюция и темы многопоточности Java

Один из наших читателей, Анант, задал этот чрезвычайно хороший вопрос, чтобы уточнить / перечислить все связанные темы, которые мы должны знать о многопоточности, включая изменения, внесенные в Java 8.(Уровень от начального до продвинутого). Все, что он хотел узнать, это эволюция многопоточного фреймворка в Java от простого интерфейса Runnable до последней функции в Java 8. Давайте решим его вопрос.

Я потратил много времени на сбор всей нижеприведенной информации. Поэтому, пожалуйста, не стесняйтесь предлагать редактирование/обновление нижеприведенной информации, если вы думаете иначе по какому-либо пункту.

Концепции многопоточности в зависимости от версии JDK

Согласно релизу JDK 1.x, в этом первоначальном релизе присутствовало всего несколько классов. Если быть совсем точным, то классы/интерфейсы были:

  • java.яз.Нить
  • java.lang.Группа потоков
  • java.lang.Выполняемый
  • java.lang.Процесс
  • java.lang.Смерть Потока
  • и некоторые классы исключений

например

  1. java.lang.IllegalMonitorStateException
  2. java.lang.IllegalStateException
  3. java.lang.IllegalThreadStateException.

Также имелось несколько синхронизированных коллекций, например java.util.Hashtable.

В JDK 1.2 и JDK 1.3 не было заметных изменений, связанных с многопоточностью.(Поправьте меня, если я что-то упустил).

JDK 1.4, было несколько изменений на уровне JVM для приостановки/возобновления нескольких потоков одним вызовом. Но никаких серьезных изменений API не было.

JDK 1.5 был первым большим релизом после JDK 1.x; и он включал несколько утилит параллельной обработки. Исполнитель, семафор, мьютекс, барьер, защелки, параллельные коллекции и блокирующие очереди; все это было включено в этот релиз. Самое большое изменение в облаке многопоточных приложений Java произошло в этом релизе.

Полный набор изменений можно прочитать по этой ссылке: http://docs.oracle.com/javase/1.5.0/docs/guide/concurrency/overview.html

JDK 1.6 был больше исправлением платформы, чем обновлением API. Так что новое изменение присутствовало в JDK 1.6.

В JDK 1.7 добавлена поддержка ForkJoinPool, которая реализовала технику перехвата работы для максимизации пропускной способности. Также был добавлен класс Phaser.

JDK 1.8 в основном известен изменениями Lambda, но также имел несколько изменений в параллелизме. Два новых интерфейса и четыре новых класса были добавлены в пакет java.util.concurrent, например CompletableFuture и CompletionException.

В Java 8 структура коллекций претерпела существенные изменения, добавив агрегатные операции на основе недавно добавленных возможностей потоков и лямбда-выражений. Это привело к добавлению большого количества методов практически во все классы коллекций, а следовательно, и в параллельные коллекции.

Полный набор изменений можно прочитать по этой ссылке: http://docs.oracle.com/javase/8/docs/technotes/guides/concurrency/changes8.html

Ссылки:

Надеюсь, приведенные выше списки помогут вам понять возможности многопоточности в зависимости от версии JDK.

Прокрутить вверх