Взаимодействие - это передача изменения одного и того же объекто несколькими потоками.
У потоков общий Heap
Можно перердать в два потока ссылку на один объект
Потоки смогут менять общий объект и взаимодействовать через него
Память не предоставляет механизмов безопасно этот процесс осуществить.
Возможные проблемы при таком взаимодействии:
1) Thread Interface - потеря результата
например потоки должны инкрементить некое поле чтобы это сделать нужно сначала прочитать значение из памяти, потом увеличить его и записать. Может получиться так что первый поток прочитал значение, увеличил его, но не успел записать в то время как второй поток прочитал это значение и сделал увеличение отталкиваясь от старого значения.
2) Memory Consistency Errors - ошибочное состояние общей памяти
Если есть некий объект поля которого должны быть согласованы, нет гарантий что в любой момент обращаясь к полям этого обьякта мы получим консистентное состояние. Например, один поток движется по массиву а другой добавляет данные в массив.
race condition - когда за общий ресурс борятся несколько потоков и они мешают друг другу