这是我在stackoverflow上的第一篇帖子...希望��人可以帮助我。
我使用Java 6的LinkedBlockingQueue
时出现了性能大幅下降的问题。在第一个线程中,我生成一些对象并将它们推入队列中,在第二个线程中,我将这些对象取出。当频繁调用LinkedBlockingQueue
的take()
方法时,性能回归就会发生。我监控了整个程序,take()
方法总体上占用了最多的时间,并且吞吐量从大约58Mb/s降至0.9Mb/s......
队列的弹出和获取方法是通过该类的静态方法调用的。
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()
方法,以实现至少25Mb/s的速度,或者是否有其他类可以使用,当“队列”满或空时将阻塞。
顺祝商祺
Bart
附言:抱歉我的英语不好,我来自德国;)