use BlockingQueue