我现在想做个类似于负载均衡轮询,目前只需要rr 轮叫(Round Robin)这种最简单的方式,即什么都不用管,1显示完了,下次访问显示2,再显示3,都显示完了,再轮回到1,于是我做了下面一个小例子,我知道我需要一个东西来保存我上次访问的位置,就叫访问位置因子吧,我不需要文件或者数据库这种额外的存储介质,我只要放到内存中。
问题来了,下面的例子始终会打印1,而不是1,2,1,2.....,这是因为每次又把i重新设置为了-1,我想知道我怎样存储这个访问位置因子(i),比如我访问过0位置,那么下次访问i是从0开始的,而不是-1,谢谢
public static Integer i ; static{
i = -1;
} public static void main(String[] args) {
Vector<Integer> v = new Vector<Integer>();
v.add(1);
v.add(2);
i = (i +1)%v.size();
System.out.println(v.get(i));
i ++;
if(i >= v.size())
i = -1;
}
问题来了,下面的例子始终会打印1,而不是1,2,1,2.....,这是因为每次又把i重新设置为了-1,我想知道我怎样存储这个访问位置因子(i),比如我访问过0位置,那么下次访问i是从0开始的,而不是-1,谢谢
public static Integer i ; static{
i = -1;
} public static void main(String[] args) {
Vector<Integer> v = new Vector<Integer>();
v.add(1);
v.add(2);
i = (i +1)%v.size();
System.out.println(v.get(i));
i ++;
if(i >= v.size())
i = -1;
}
只是需要一个变量而已 为什么连Vector 都弄出了呢
class Number{
private static int number = 1;
public static int getNumber(){
if(number > 2) number >>= 1;
return number++;
}
}
这个貌似可以得到你要求的 12121212...
不知这样可否 private static int index = 0;
public static void main(String[] args) {
Vector<Integer> v = new Vector<Integer>();
v.add(1);
v.add(2);
System.out.println(v.get(index++));
if(index >= v.size())
index = 0;
}
i = (i +1)%v.size();
为什么还要给i付值呢?
这样弄i不是逐一递增了。所以你把取第二个元素的case给过滤掉了第一次
i = -1
i = (i +1)%v.size();后
i=0
取向量值后 i++
i = 1第二次
i = 1
i = (i +1)%v.size();后
i=0
取向量值后 i++
i = 1如此,始终get(0);
恩,这才是问题所在
你每次都用main跑,当然结果一样开多线程就不一样了,试试吧
pageEncoding="UTF-8"%>
<%@ page import="java.util.*"%>
<%!
private static int index = -1;
%><%
Vector<Integer> v = new Vector<Integer>();
v.add(1);
v.add(2);
out.println(v.get(++index));
if(index >= v.size()-1)
index = -1;
%>你放到resin或者tomcat中看看,是不是1,2,1,2静态变量共享内存空间