Это мой первый пост в stackoverflow... Я надеюсь, что кто-то может мне помочь
У меня большая регрессия производительности с Java 6 LinkedBlockingQueue
.
В первом потоке я генерирую некоторые объекты, которые я вставляю в очередь
Во втором потоке я вытаскиваю эти объекты. Регрессия производительности возникает, когда часто используется метод take()
LinkedBlockingQueue
.
Я отслеживал всю программу, а метод take()
требовал больше всего времени.
И пропускная способность идет от ~ 58Mb/s до 0.9Mb/s...
очередь поп и взять методы ar, вызванные статическим методом из этого класса
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 Мбит/с, или есть другой класс, который я могу использовать, который будет блокироваться, когда "очередь" заполнена или пуста.
С уважением
Барта
P.S.: Извините за мой плохой английский, я из Германии;)