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

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;
	        
	    }
	
}

©️2020 CSDN 皮肤主题: 大白 设计师: CSDN官方博客 返回首页
实付0元
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值