Как шутят эксперты по многопоточности, программисты делятся на два типа: те, кто ничего не знает о многопоточности и те, кто думают, что что-то знают ☺ В этом докладе мы поговорим про дедлоки и способы борьбы с ними, включающие решения на Atomic/CAS.
В первой части мы поговорим о проблеме Обедающих Философов, классической многопоточной задаче, и на ее примере посмотрим, что такое Deadlock и Starvation. Сначала будет описана сама задача, потом будет дан небольшой кусок теории, после чего будет показано несколько различных вариантов ее решения на Java, каждое из которых вскроет новые многопоточные грабли.
Во второй части речь пойдет о lock-free алгоритмах и структурах данных, посмотрим, какие стандартные средства нам для этого предоставляет Java. Мы поговорим о CAS-операциях, Atomic-типах, неблокирующих алгоритмах и проблеме ABA.