Как следует из названия, связь между потоками — это связь между двумя синхронизированными потоками.
Позвольте мне объяснить это ясно на примере.
Предположим, у меня есть производитель потока, который производит или устанавливает значение. У нас также есть потребительский поток, который считывает значение. Если эти 2 потока работают параллельно, мы должны убедиться, что значение чтения происходит только после того, как значение установлено, иначе мы получим исключение нулевого указателя.
У нас есть 3 метода, которые принадлежат классу Object
- Wait() — сообщает потоку снять блокировку и подождать, пока другой поток не вызовет методы
notify()
илиnotifyAll()
. - notify() — пробуждает один ожидающий поток
- notifyAll() — уведомляет или пробуждает все потоки, ожидающие завершения потока.
Допустим, у меня есть класс продюсера
Потребительский класс
Класс Q
В основном методе я бы создавал объекты классов Producer и Consumer.
В классе Q у нас есть переменная valueSet
, которая указывает, обновляется ли мое значение или нет. Если он не обновлен, он вызывает метод wait()
, который заставляет поток снять блокировку объекта. MeanWhile, Producer Thread воздействует на объект и устанавливает значение. После того, как значение установлено, он вызывает метод notify()
, который уведомляет поток-потребитель и начинает получать значение.
Этот процесс называется InterThread Communication.