Java swingworker定期处理ArrayList

Java swingworker定期处理ArrayList,java,swingworker,Java,Swingworker,我让一个SwingWorker定期处理db中的字符串列表ArrayList,以使用最新数据更新GUI。我让doInBackground()方法在一个连续循环中运行(在每个间隔后休眠) @覆盖 受保护的Void doInBackground()引发异常{ while(true){ ArrayList=newArrayList(db.getList(true)); 集合。排序(列表); 公布(名单); 睡眠(10000); } } 在每个时间间隔,我都会调用publish,以便调用者

我让一个SwingWorker定期处理db中的字符串列表
ArrayList
,以使用最新数据更新GUI。我让
doInBackground()
方法在一个连续循环中运行(在每个间隔后休眠)

@覆盖
受保护的Void doInBackground()引发异常{
while(true){
ArrayList=newArrayList(db.getList(true));
集合。排序(列表);
公布(名单);
睡眠(10000);
}       
}
在每个时间间隔,我都会调用publish,以便调用者可以获得更新的列表,我会通过如下所示的目标对象将其传递给调用者:

@Override
protected void process(List<ArrayList<String>> list) {
    ArrayList<String> s = list.get(list.size() - 1);
    target.statusUpdate(s);
    super.process(list);        
}
@覆盖
受保护的无效进程(列表){
ArrayList s=list.get(list.size()-1);
目标。状态更新;
超级进程(列表);
}
我担心如果列表很长,我的列表可能会占用大量内存。我只关心当前列表,而不关心所有列表的历史。这让我觉得我设置的不正确


我如何优化它?

您可以。。。从列表中删除已处理的元素。请注意,Java提供了表示队列的类。但是SwingWorker是列表的定义者。如果您关心并发性问题,很好。处理这个问题有多种方法。一个是。我正在重写SwingWorker定义的方法签名,那么如何使用这个类来解决列表变长的问题呢?我不关心我的ArrayList(它是相当静态的),我关心的是列表。我的理解是,列表会随着每次调用process()的迭代而不断增长?在进一步阅读之后,我意识到我们错误地使用了SwingWorker。我改为调用所需功能的计时器,从而消除了上述问题。
@Override
protected void process(List<ArrayList<String>> list) {
    ArrayList<String> s = list.get(list.size() - 1);
    target.statusUpdate(s);
    super.process(list);        
}