zoukankan      html  css  js  c++  java
  • 高并发下产生大量,随机,唯一的字符串,并输出到文件中

    随机的条件比较好实现。
    问题的关键是高并发下怎么产生唯一的字符串

    1、由于需要判重且数量较大,所以选用Bloom Filter。
    BloomFilter的特点是:
    如果Bloom Filter判断一条记录不存在,则它一定不存在;
    如果Bloom Filter判断一条记录存在,则它可能存在,也可能不存在。
    我们只要不存在的记录,所以可以使用Bloom Filter

    2、加锁
    假设线程A和B同时产生"4InLove"字符串,且通过Bloom Filter判断没有产生过,那么就有可能将重复的两个数据输出到文件中,
    所以需要加锁进行判断

    以下是关键代码:

    //用来判断是否产生过这个字符串
    public static boolean putIfNotContain(String str){
    
            lock.lock();
            boolean flag = false;
            try {
                if(!bloomFilter.mightContain(str)){
                    bloomFilter.put(str);
                    flag = true;
                }
            }catch (Exception e){
                e.printStackTrace();
            }finally {
                lock.unlock();
            }
            return flag;
        }
    
    //产生字符串时需要判断
    public static String getRandomActivationCode(int length) {
            String code = StringUtils.upperCase(YxStringUtils.randomString(length));
            while (!GenarateUniqueActivationCode.putIfNotContain(code)) {
                code = StringUtils.upperCase(YxStringUtils.randomString(length));
            }
            return code;
        }
    
    
  • 相关阅读:
    【Gitbook】实用配置及插件介绍
    【Git】学习记录
    【Ubuntu】使用记录
    intellij idea
    【应用】信息短时存储
    leetcode pow(x,n)实现
    SSM框架-----------SpringMVC+Spring+Mybatis框架整合详细教程
    《平凡的世界》之我看
    垃圾收集器与内存分配策略(三)
    垃圾收集器与内存分配策略(二)
  • 原文地址:https://www.cnblogs.com/bendantuohai/p/6156133.html
Copyright © 2011-2022 走看看