это мой первый пост на stackoverflow ... Я надеюсь, что кто-то может мне помочь
У меня большой спад производительности с Java 6 LinkedBlockingQueue
.
В первом потоке я генерирую несколько объектов, которые помещаю в очередь
Во второй теме я вытаскиваю эти объекты. Падение производительности происходит при частом вызове метода take()
из LinkedBlockingQueue
.
Я следил за всей программой, и метод take()
потребовал больше всего времени.
И пропускная способность идет от ~ 58 Мбит / с до 0,9 Мбит / с ...
методы pop и take очереди, вызываемые статическим методом из этого класса
public class C_myMessageQueue {
private static final LinkedBlockingQueue<C_myMessageObject> x_queue = new LinkedBlockingQueue<C_myMessageObject>( 50000 );
/**
* @param message
* @throws InterruptedException
* @throws NullPointerException
*/
public static void addMyMessage( C_myMessageObject message )
throws InterruptedException, NullPointerException {
x_queue.put( message );
}
/**
* @return Die erste message der MesseageQueue
* @throws InterruptedException
*/
public static C_myMessageObject getMyMessage() throws InterruptedException {
return x_queue.take();
}
}
как я могу настроить метод take()
для достижения как минимум 25 Мбит / с, или есть другой класс, который я могу использовать, который будет блокировать, когда "очередь" заполнена или пуста.
С уважением
Bart
П.С .: простите за мой плохой английский, я из Германии;)