this is a good point  for some reason i was assuming thread pool would be global but that does not seem correct  right now there is two thread pools per device which does not make sense stupid question whats the advantage of using newsinglethreadexecutor as opposed to just creating a thread for each request  since as you point out we already have logic in place to restrict to one active fetch at a time what do you think of trying to create a static shared thread pool  overkill 