В библиотеках есть некоторые менеджеры (я уверен, что другие порекомендуют), но, как и я, вам, возможно, будет удобнее в долгосрочной перспективе создать такого менеджера, который точно соответствует вашим потребностям.
Это может быть довольно просто и может быть общим для Java, а не только для Android. Это может быть просто ArrayList из Runnables. Один метод добавляет runnable к задней части ArrayList. При первом вызове этого метода новый поток инициализируется и запускается. Этот поток просто неоднократно удаляет Runnable из передней части ArrayList и выполняет его. Когда ArrayList пуст, поток завершается.
Вы должны позаботиться о том, чтобы обеспечить безопасный доступ к потоку ArrayList, но это действительно может быть так просто.
Все становится немного сложнее, если вам нужно добавить приоритеты или отменить задачи в очереди или в процессе.