Как следует из названия, связь между потоками — это связь между двумя синхронизированными потоками.

Позвольте мне объяснить это ясно на примере.

Предположим, у меня есть производитель потока, который производит или устанавливает значение. У нас также есть потребительский поток, который считывает значение. Если эти 2 потока работают параллельно, мы должны убедиться, что значение чтения происходит только после того, как значение установлено, иначе мы получим исключение нулевого указателя.

У нас есть 3 метода, которые принадлежат классу Object

  • Wait() — сообщает потоку снять блокировку и подождать, пока другой поток не вызовет методы notify()или notifyAll().
  • notify() — пробуждает один ожидающий поток
  • notifyAll() — уведомляет или пробуждает все потоки, ожидающие завершения потока.

Допустим, у меня есть класс продюсера

Потребительский класс

Класс Q

В основном методе я бы создавал объекты классов Producer и Consumer.

В классе Q у нас есть переменная valueSet, которая указывает, обновляется ли мое значение или нет. Если он не обновлен, он вызывает метод wait(), который заставляет поток снять блокировку объекта. MeanWhile, Producer Thread воздействует на объект и устанавливает значение. После того, как значение установлено, он вызывает метод notify(), который уведомляет поток-потребитель и начинает получать значение.

Этот процесс называется InterThread Communication.