package org.springside.modules.utils.concurrent; import java.util.concurrent.CountDownLatch; import java.util.concurrent.CyclicBarrier; import org.springside.modules.utils.concurrent.jsr166e.LongAdder; import org.springside.modules.utils.concurrent.throttle.Sampler; import com.google.common.util.concurrent.RateLimiter; public class ConcurrentTools { /** * 返回没有激烈CAS冲突的LongAdder, 并发的+1将在不同的Counter里进行,只在取值时将多个Counter求和. * * 为了保持JDK版本兼容性,统一采用移植版 */ public static LongAdder longAdder() { return new LongAdder(); } /** * 返回CountDownLatch */ public static CountDownLatch countDownLatch(int count) { return new CountDownLatch(count); } /** * 返回CyclicBarrier */ public static CyclicBarrier cyclicBarrier(int count) { return new CyclicBarrier(count); } /////////// 限流采样 ////// /** * 返回漏桶算法的RateLimiter * * @permitsPerSecond 期望的QPS, RateLimiter将QPS平滑到毫秒级别上,但有蓄水及桶外预借的能力. */ public static RateLimiter rateLimiter(int permitsPerSecond) { return RateLimiter.create(permitsPerSecond); } /** * 返回采样器. * * @param selectPercent 采样率,在0-100 之间,可以有小数位 */ public static Sampler sampler(double selectPercent) { return Sampler.create(selectPercent); } }