首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >记录重复消息一次

记录重复消息一次
EN

Stack Overflow用户
提问于 2015-08-25 09:38:27
回答 1查看 163关注 0票数 1

我处在一个独特的情况下,我同时或几乎在同一时间收到来自10-25个来源的重复消息。我用来反击这个的代码是:

代码语言:javascript
复制
private Queue<String> messages = new ConcurrentLinkedQueue<>();

public void log(String message) {
    if(!messages.contains(message)) {
        if(messages.size() >= 5) {
            messages.remove(0);
        }
        messages.add(message);
        Main.getLogger().info(message);
    }
}

这段代码的问题在于,由于该方法是并发调用的,它有时会记录2-4次消息,而不是只记录一次。

EN

回答 1

Stack Overflow用户

发布于 2015-08-25 10:00:43

考虑将对记录器的实际写入放在一个单独的线程中,该线程从线程安全队列读取传入的日志消息,并在写入之前检查重复项。执行日志记录的应用程序将简单地将日志消息写入队列,而编写器将监视队列中是否有新消息。当一条消息传入时,会根据之前的一些消息检查它的唯一性,如果它是唯一的,则将其写入队列并存储在一组较旧的消息中以进行检查(可能会推出较旧的消息)。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32194267

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档