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;
        }
    
    
  • 相关阅读:
    Codeforces.468C.Hack it!(构造)
    BZOJ.3227.[SDOI2008]红黑树tree(树形DP 思路)
    146
    145
    144
    143
    142
    141
    140
    139
  • 原文地址:https://www.cnblogs.com/bendantuohai/p/6156133.html
Copyright © 2011-2022 走看看