use Queue to implement a blocking pool