检查sun.misc.Queue的大小

时间:2014-01-27 09:13:27

标签: java queue

我的项目通过扩展sun.misc.Queue使用队列,我需要每秒知道此队列的大小。

由于 sun.misc.Queue 未提供size方法API。我尝试将toString方法添加到扩展 sun.misc.queue ,并在专用于每秒打印队列的单独线程中调用toString。

public String toString()
{
    int count = 0;
    Enumeration er = null;
    synchronized (this)
    {
        er = myQ.elements();

        while (er.hasMoreElements())
        {
            count++;
        }
    }
    return "" + count ;
}

myQ 是此课程中的字段。

但这也不行。在我添加此代码之后,完整的系统将进行折腾。

任何人都可以帮助确定我是否做错了。

2 个答案:

答案 0 :(得分:1)

使用标准的java队列(LinkedList例如设计为能够将其用作出队)。它们提供了一种尺寸方法。

或者你可以覆盖各种添加/删除方法并在内部保留一个计数器,这样你就可以知道它的大小。你最好只使用合适的工具来完成工作。

答案 1 :(得分:0)

免责声明:除非必须,否则不要使用反射。

    Queue q = new Queue();
    Field f = Queue.class.getDeclaredField("length");
    f.setAccessible(true);
    int size = f.getInt(q);
    System.out.println(size);

我再次阅读你的问题......现在我因为写“去折腾”而生你的气。 Stacktrace或GTFO。