java 多线程下的 id产生方式

public final class DefaultLongNumericGenerator
  implements LongNumericGenerator
{
  private static final int MAX_STRING_LENGTH = Long.toString(9223372036854775807L).length();
  private static final int MIN_STRING_LENGTH = 1;
  private final AtomicLong count;
  
  public DefaultLongNumericGenerator()
  {
    this(0L);
  }
  
  public DefaultLongNumericGenerator(long initialValue)
  {
    this.count = new AtomicLong(initialValue);
  }
  
  public long getNextLong()
  {
    return getNextValue();
  }
  
  public String getNextNumberAsString()
  {
    return Long.toString(getNextValue());
  }
  
  public int maxLength()
  {
    return MAX_STRING_LENGTH;
  }
  
  public int minLength()
  {
    return 1;
  }
  
  protected long getNextValue()
  {
    if (this.count.compareAndSet(9223372036854775807L, 0L)) {
      return 9223372036854775807L;
    }
    return this.count.getAndIncrement();
  }

}




public abstract interface LongNumericGenerator
  extends NumericGenerator
{
  public abstract long getNextLong();

}




public abstract interface NumericGenerator
{
  public abstract String getNextNumberAsString();
  
  public abstract int maxLength();
  
  public abstract int minLength();

}

扫描二维码关注公众号,回复: 2472339 查看本文章



以上代码在org.jasig.cas.util 中得到。

猜你喜欢

转载自blog.csdn.net/tanxuefeng22/article/details/80184479