【发布时间】:2014-09-02 06:13:11
【问题描述】:
我编写了以下 Java 代码:
twitterStream.addListener(new StreamListener());
FilterQuery filterQuery = new FilterQuery();
filterQuery.follow(filteringUsers);
filterQuery.track(filteringWords);
twitterStream.filter(filterQuery);
跟踪 Twitter 中的一些用户和关键字(通过 Streaming API)。这里StreamListener是我个人实现的监听器。
我正在跟踪很多关键字、主题标签和用户,因此我在内存中积累了大量等待处理的推文。事实上,我只是将它们通过监听器(在onStatus() 方法中)并将它们刷新到数据库中。
不过,他们必须在内存中等待的事实显然会在几个小时内使内存饱和。在 20 分钟的运行中,我在内存中积累了 177000 个LinkedBlockingQueue$Node 对象和 1.272MB 的char[](通过分析查看)。
我想保持管道连续运行,显然这在当前状态下是不可能的。
所以想知道有没有办法在多线程中添加多个监听器,让他们可以同时清空推文队列,加快处理速度。
- 如果可能:这些侦听器是否同时清空队列?我的意思是:他们是否会多次阅读同一条推文?
- 如果不可能:我该如何解决我的问题?
提前致谢。
【问题讨论】:
标签: java multithreading twitter twitter4j