当使用ThreadLocal维护变量时,ThreadLocal为每个使用该变量的线程提供独立的变量副本,所以每一个线程都可以独立地改变自己的副本,而不会影响其它线程所对应的副本。
演示代码:
package com.oa;
public class SystemContext {
private static ThreadLocal offset = new ThreadLocal();//分页起始记录
private static ThreadLocal pageSize = new ThreadLocal();//每页显示的记录
public static void setOffset(int offsetValue) {
offset.set(offsetValue);
}
public static void setPageSize(int pageSizeValue) {
pageSize.set(pageSizeValue);
}
public static int getOffset(){
Integer os = (Integer)offset.get();
if(os==null){
os = 0;
}
return os;
}
public static int getPageSize(){
Integer ps = (Integer)pageSize.get();
if(ps==null){
ps = Integer.MAX_VALUE;
}
return ps;
}
public static void remove() {
removeOffset();
removePageSize();
}
public static void removeOffset(){
offset.remove();
}
public static void removePageSize(){
pageSize.remove();
}
}
这样offset,和pageSize就会在每一个url访问时,单独为每一个访问他的url单独绑定访问他的线程,线程直接这两个变量是独立的;使用的时候只需要调用get,set方法,设置其值就行,它会自动的绑定访问他的线程