Subject – это абстрактный класс в RxJava, одновременно расширяющий класс Observable и реализующий интерфейс Observer. Subject – это hot observable.

В RxJava есть следующие реализации Subject:

Publish Subject. Подписчики PublishSubject получают только те элементы, которые отправляются после момента подписки. PublishSubject не кэширует и не рассылает прошлые элементы.

BehaviorSubject отправляет каждому новому подписчику элемент, который был разослан до подписки, и все последующие элементы.

AsyncSubject. Подписчики получают только последний элемент, который был отправлен перед вызовом onComplete().

ReplaySubject. По-умолчанию каждый новый подписчик получает все элементы, которые были отправлены до подписки, и все последующие элементы.
Если ReplaySubject создается фабричным методом createWithSize(size: Int), то подписчики будут получать только заданное количество элементов, отправленных в прошлом.

UnicastSubject работает также как ReplaySubject, но может иметь только одного подписчика. Все последующие подписчики получают onError() с IllegalStateException.

Более подробный разбор.