两种方法实现轮询负载均衡算法

package com.yanek.soa.loadbalance;

import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.atomic.AtomicInteger;

public class MyLoadBalance {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		
		List<String> ips=new ArrayList<String>();
		
		ips.add("192.168.0.1");
		
		ips.add("192.168.0.2");
		
		ips.add("192.168.0.3");
		
		//测试第一种方法
		System.out.println("选择ip:"+doSelect2(ips));
		System.out.println("选择ip:"+doSelect2(ips));
		System.out.println("选择ip:"+doSelect2(ips));
		System.out.println("选择ip:"+doSelect2(ips));
		System.out.println("选择ip:"+doSelect2(ips));
		System.out.println("选择ip:"+doSelect2(ips));
		System.out.println("选择ip:"+doSelect2(ips));
		
		//测试第二种方法
		
		System.out.println("选择ip:"+doSelect(ips));
		System.out.println("选择ip:"+doSelect(ips));
		System.out.println("选择ip:"+doSelect(ips));
		System.out.println("选择ip:"+doSelect(ips));
		System.out.println("选择ip:"+doSelect(ips));
		System.out.println("选择ip:"+doSelect(ips));
		System.out.println("选择ip:"+doSelect(ips));

	}

	
	    private static Integer index = 0;
	    /**
	     * 加锁同步实现线程安全的轮询负载均衡算法
	     * @param iplist
	     * @return
	     */
	    public static String doSelect(List<String> iplist) {
	        synchronized (index) {
	            if (index >= iplist.size()) {
	                index = 0;
	            }
	            String ip = iplist.get(index);
	            index++;
	            return ip;
	        }
	    }
	
	    
	    private static AtomicInteger index_ = new AtomicInteger(0);
	    /**
	     * 原子类实现线程安全的轮询负载均衡算法
	     * @param iplist
	     * @return
	     */
	    public static String doSelect2(List<String> iplist) {
	       
	            if (index_.get() >= iplist.size()) {
	            	index_ = new AtomicInteger(0);
	            }
	            String ip = iplist.get(index_.get());
	            index_.incrementAndGet();
	            return ip;
	        
	    }
	
}

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值