producer consumer using blocking queue