diff --git a/motan-core/src/main/java/com/weibo/api/motan/transport/AbstractSharedPoolClient.java b/motan-core/src/main/java/com/weibo/api/motan/transport/AbstractSharedPoolClient.java index 65ee6ede4..7906a3c98 100644 --- a/motan-core/src/main/java/com/weibo/api/motan/transport/AbstractSharedPoolClient.java +++ b/motan-core/src/main/java/com/weibo/api/motan/transport/AbstractSharedPoolClient.java @@ -84,7 +84,7 @@ private void createConnections() { } protected Channel getChannel() throws MotanServiceException { - int index = MathUtil.getNonNegative(idx.getAndIncrement()); + int index = MathUtil.getNonNegativeRange24bit(idx.getAndIncrement()); Channel channel; for (int i = index; i < connections + index; i++) { diff --git a/motan-core/src/main/java/com/weibo/api/motan/util/MathUtil.java b/motan-core/src/main/java/com/weibo/api/motan/util/MathUtil.java index 2b118f2bd..2549f2fa4 100644 --- a/motan-core/src/main/java/com/weibo/api/motan/util/MathUtil.java +++ b/motan-core/src/main/java/com/weibo/api/motan/util/MathUtil.java @@ -66,4 +66,15 @@ public static long parseLong(String longStr, long defaultValue){ public static int getNonNegative(int originValue){ return 0x7fffffff & originValue; } + + /** + * 通过二进制位操作将originValue转化为非负数: + * 范围在[0-16777215] 之间 + * + * @param originValue + * @return + */ + public static int getNonNegativeRange24bit(int originValue) { + return 0x00ffffff & originValue; + } }