Похоже, вы уже сделали работу, если честно. Все, что вам нужно сделать, это создать BlockingQueue и создать поток для его обработки, который, я думаю, является вашим потребителем. Предполагая, что у вас есть DataInputStream 'in' ...
Примерно так:
BlockingQueue<String> receivedQueue = new LinkedBlockingQueue<String>();
public void run()
{
while (true)
{
try
{
receivedQueue.put(in.readUTF());
} catch (EOFException e)
{
ch.getClient().disconnect();
break;
} catch (IOException e)
{
break;
} catch (InterruptedException e)
{
break;
}
}
theQueueProcessor.interrupt();
}