现实当中很多场景,需要进行轮训服务,比如轮训在10个日志文件当中写日志,在10台机器上轮训的去调用以实现负载均衡,常规的做法,
如tomcat的Poller线程轮训选择,就采用
Math.abs(pollerRotater.incrementAndGet()) % pollers.length
此地需要取原子自增的绝对值模以poller线程数,那是否有更好的实现呢?
public class CycleAtomicInteger {
private final static long PARK_TIME = 1000L * 1000;
private AtomicInteger counter = new AtomicInteger(0);
private int range;
public CycleAtomicInteger(int range) {
if (range < 2)
throw new IllegalArgumentException();
this.range = range;
}
/**
* 获取下个原子值
*
* @return
*/
public int next() {
for (;;) {
int c = counter.get();
int next = (c + 1) % range;
if (counter.compareAndSet(c, next)) {
return c;
} else {
LockSupport.parkNanos(PARK_TIME);
}
}
}
}
这样就可以快速的实现rr的效果,同时也避免了abs的过程,至于LockSupport.parkNanos(PARK_TIME);加了这个后,4个线程执行2亿次的计算,我本机从原来的16s减少到4s,至于为什么要加这个,可见更快的atomicInteger
当然,这样设计会存在cas的aba问题,但对当前的case需求,其实是满足的,也不存在问题
相关推荐
同步控制是并发程序必不可少的重要手段,本文我们将通过重入锁、读写锁、信号量、倒计数器和循环栅栏以及他们的实例来介绍Java并发程序中的同步控制。 目录线程安全 Thread Safety重入锁 ReentrantLock读写锁 ...
整数是一个受锁保护的简单计数器,该计数器标记缓冲区/队列中的最后一个可用插槽(客户端需要)。 如果缓冲区足够大(例如无限大),则简单的原子增量就足够了(例如fetch_and_add)。 每个“ OPS”数组的元素都是...
掌握条件分支、循环控制、异常处理、构造方法在字节码级别的实现原理,利用HSDB工具理解多态原理。还会涉及从编译期的语法糖处理,到类加载的各个阶段,直至运行期的各项优化的详细讲解。最后不要错过方法反射优化的...
原子性、可见性、有序性 volatile 什么是 volatile? 为什么基于 volatile变量的运算在并发下不一定是安全的? 为什么使用 volatile? 并发与线程 并发与线程的关系? 什么是线程? 实现线程有哪些方式? Java线程的实现 ...
实例047 按钮控件数组实现计数器界面 58 实例048 复选框控件数组 59 实例049 用数组反转字符串 60 3.3 数组排序与查询 61 实例050 使用选择排序法 61 实例051 使用冒泡排序法 62 实例052 使用快速排序法 64 实例053 ...
10.3.2 自动装箱、拆箱与遍历循环 10.3.3 条件编译 10.4 实战:插入式注解处理器 10.4.1 实战目标 10.4.2 代码实现 10.4.3 运行与测试 10.4.4 其他应用案例 10.5 本章小结 第11章 晚期(运行期)优化 11.1...
第2章 Java内存区域与内存溢出异常 / 24 2.1 概述 / 24 2.2 运行时数据区域 / 25 2.2.1 程序计数器 / 25 2.2.2 Java虚拟机栈 / 26 2.2.3 本地方法栈 / 27 2.2.4 Java堆 / 27 2.2.5 方法区 / 28 2.2.6 运行...
12.2.1 原子性 317 12.2.2 一致性 320 12.2.3 隔离性 320 12.2.4 持久性 321 12.3 数据库锁 321 12.3.1 锁粒度 322 12.3.2 锁升级 325 12.3.3 锁模式 326 12.3.4 锁兼容性 332 12.4 隔离级别 332 12.4.1 ...
12.2.1 原子性 317 12.2.2 一致性 320 12.2.3 隔离性 320 12.2.4 持久性 321 12.3 数据库锁 321 12.3.1 锁粒度 322 12.3.2 锁升级 325 12.3.3 锁模式 326 12.3.4 锁兼容性 332 12.4 隔离级别 332 12.4.1 ...