У меня есть следующий вопрос, касающийся Java 7 ConcurrentLinkedQueue. Предположим, что у меня есть следующий класс:
public class Blah {
private ConcurrentLinkedQueue<String> queue;
public Blah() {
queue = new ConcurrentLinkedQueue<String>();
}
public void produce(String action, String task) throws InterruptedException {
synchronized(queue) {
while(queue.size() >= 8)
queue.wait();
queue.add(action + "#" + task);
queue.notifyAll();
}
}
public void consume() throws InterruptedException {
synchronized(queue) {
while(queue.size() <= 0)
queue.wait();
String element = queue.poll();
StringTokenizer strTok = new StringTokenizer(element, "#");
String action = strTok.nextToken();
String task = strTok.nextToken();
/**
* Operate on request
*/
queue.notifyAll();
}
}
}
Функции производства и потребления будут вызываться параллельными потоками для создания/удаления потоков для/из списка. Я реализую предыдущие функции потребления() и производства(), чтобы сериализовать добавление/удаление элементов в моей очереди. Требуется ли вышеперечисленное, или ConcurrentLinkedQueue позаботится об этом? Я спрашиваю, потому что не хочу снижать производительность своего кода.
Спасибо, Ник.
ConcurrentLinkedQueue
. Он гарантирует атомарность и видимость при правильном использовании. Вы переводите неблокирующийQueue
вBlockingQueue
а>. Не. - person Boris the Spider   schedule 13.04.2015