我的项目通过扩展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 是此课程中的字段。
但这也不行。在我添加此代码之后,完整的系统将进行折腾。
任何人都可以帮助确定我是否做错了。
答案 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。