Правильный способ работы с буфером FIFO

У меня есть этот FIFO, который я собираюсь использовать для хранения данных с сетевого сервера:

 Buffer nServerFifo = (Buffer) BufferUtils.synchronizedBuffer(new CircularFifoBuffer(200));

    // Insert into to the Network Server Buffer    
    public void nServerFifoAdd(String string){
        nServerFifo.add(string);        
    }

    // Get data from the Network Server Buffer
    public Object nServerFifoGet(){         
        Object string = nServerFifo.get();    
        nServerFifo.remove(string);
        return string;           
    }

Мой вопрос заключается в том, как правильно хранить вставку данных и получать данные из буфера? Нужно ли удалять данные после того, как я получу, если это сделано буфером? У вас есть идея, какой максимальный размер строки может быть сохранен в буфере?

2 ответа

Решение

Его лучше использовать ArrayBlockingQueue class который присутствует в java.util.concurrent пакет, который является потокобезопасным.

BlockingQueue<String> queue = new ArrayBlockingQueue<String>(100);

queue.put("Vivek");   // To insert value into Queue

queue.take();         // To take the value out of Queue

Предполагая, что вы используете классы из коллекций Commons:

  1. Если вы используете remove() метод, вам не нужно ничего дополнительно удалять
  2. В буфере хранятся ссылки на объекты, а не строки, поэтому он ограничен количеством выделенных слотов. В вашем случае вы можете добавить до 200 строк произвольной длины, ограниченных общим объемом памяти, доступным вашей программе, до заполнения буфера.

Как отметил Кумар, вам, вероятно, лучше использовать вместо этого классы очередей библиотеки времени выполнения Java, поскольку они обрабатывают синхронизацию для вас, в то время как классы Commons Collections требуют, чтобы вы сами блокировали итератор.

Другие вопросы по тегам