У меня есть несколько потоков, которые нужно добавить в одну очередь. Эта очередь разделяется на несколько переменных, так эффективно, я вызываю функцию, которая добавляется к каждой переменной в некоторой позиции i. От http://www.youtube.com/watch?v=8sgDgXUUJ68&feature=c4-overview-vl&list=PLBB24CFB073F1048E Мне показали, что для каждого метода добавляются блокировки, как показано здесь. http://www.caveofprogramming.com/java/java-multiple-locks/. Не представляется эффективным создание блокировки для 100 000 объектов в массиве. В java, допустим, у меня есть объект, который управляет большой очередью объектов. Как правильно синхронизировать addToQueue, не жертвуя производительностью, синхронизируя метод, просто позицию в floatQueue и intQueue, к которой я добавляю?Несколько потоков в java, добавляющих в очередь
class QueueManager {
private float[] floatQueue;
private int[] intQueue;
private int currentQueueSize;
private int maxQueueSize;
QueueManager(int sizeOfQueue) {
intQueue = new int[sizeOfQueue];
floatQueue = new float[sizeOfQueue];
currentQueueSize = 0;
maxQueueSize = sizeOfQueue;
}
public boolean addToQueue(int a, float b) {
if (currentQueueSize == maxQueueSize) {
return false;
}
else{
intQueue[currentQueueSize] = a;
floatQueue[currentQueueSize] = b;
currentQueueSize++;
return true;
}
}
}
Один из способов, по которым я хотел бы добавить экземпляр менеджера очередей в каждый поток и изменить переменные на статические изменчивые массивы. Есть лучший способ сделать это? – user1876508
Похоже, что вы хотите использовать метод BlockingQueue с использованием метода предложения? –
В качестве побочного примечания, к сожалению, нет реализации блокировки свободной очереди в java –