正数原子递增选择器

原则:
1.原子性:要保证操作是原子的,线程安全的,java的atomatic包里的AtomicInteger符合这种要求
2.正数性:数字在java中是用补码进行表示的,第一位为符号位,0代表正数,1代表负数,可以对递增的数值进行与0x7FFFFFFF(int类型,4个字节)操作,保证永远为正数。当递增超过0x7FFFFFFF时,又会从0开始递增
附metaq中的实现,这个主要用在轮询的分区选择器上RoundRobinPartitionSelector,用于均匀的选择分区
/**
 * 正数的原子递增器,主要用于实现轮询
 *
 * @author apple
 *
 */
public class PositiveAtomicCounter {
    private final AtomicInteger atom;
    private static final int mask = 0x7FFFFFFF;
    public PositiveAtomicCounter() {
        atom = new AtomicInteger(0);
    }
    public final int incrementAndGet() {
        final int rt = atom.incrementAndGet();
        return rt & mask;
    }
    public int intValue() {
        return atom.intValue();
    }
}


你可能感兴趣的:(选择器)