@Override
	  public void or(NIOFilter filter) {
	    if(filter == null
	        || !(filter instanceof NIOFilter)
	        || filter.vectorSize != this.vectorSize
	        || filter.nbHash != this.nbHash) {
	      throw new IllegalArgumentException("filters cannot be or-ed");
	    }

	    AdjustedCountingBloomFilter cbf = (AdjustedCountingBloomFilter)filter;

	    int sizeInWords = buckets2words(vectorSize);
	    for(int i = 0; i < sizeInWords; i++) {
	    	boolean hasUpdatedSuccess = false;   // 是否更新成功
	    	int retriedTimes = 0;   // 已重试次数
	    	while(!hasUpdatedSuccess && retriedTimes < MAX_UPDATE_RETRY_TIMES) {
	    		long oldVal = buckets[i].get();
	    		hasUpdatedSuccess = buckets[i].compareAndSet(oldVal, oldVal | cbf.buckets[i].get());
	    		
	    		retriedTimes++;
	    	}   // while ends
	    	
		    // do log
		    if(!hasUpdatedSuccess && retriedTimes == MAX_UPDATE_RETRY_TIMES) {
		    	LOG.error("collision occurn: or");
		    }
	    }
	  }