Наилучшим способом может быть перегрузка начала класса B для получения параметра (A, или, что еще лучше, интерфейса, реализованного A). Затем B может сохранить его для извлечения из C (если это внутренний класс) или передать его конструктору C ...
EDIT:
Хотя, как упомянул комментатор, переопределение конструктора будет работать, оно не соответствует параметрам вопроса, который был сформулирован таким образом, что B уже существует, поэтому я предлагаю перегрузить start () следующим образом:
b.start(A aParam) {
a=aParam;
start();
}
Однако эта версия НЕ является поточно-ориентированной. Конструктор B работает, если B действительно создается каждый раз, или если C запускается при запуске b, тогда его можно передать конструктору C по мере его создания.
Кстати, расширение потока обычно не так хорошо, как реализация runnable по целому ряду причин.