Создайте класс, который создает отдельный поток и передает работу этому потоку. Другие классы могут работать с этим классом.
Это то, что называется диспетчером. Диспетчер может инкапсулировать очередь и некоторое время находиться в режиме ожидания одного потока, получить блокировку очереди, проверить очередь на наличие элементов, получить пару элементов из очереди, снять блокировку очереди, обработать некоторые элементы и go на некоторое время вернуться в спящий режим.
У диспетчера будет метод, который получит блокировку очереди, добавит рабочий элемент и снимет блокировку очереди. Этот метод будет вызываться другими потоками для публикации работы.