replace BlockingQueue with ThreadLocal