日期:2014-05-19  浏览次数:20780 次

ThreadLocal在J2EE轻量级开发中的应用

ThreadLocal 相当于一个容器,在这个容器中保留了一个个的变量,每一个变量是为每一个线程单独存放。

在J2EE轻量级开发中,一般我们分为Action、Service、Model这几层,Action层一般是多态的,所以一般线程安全。而Service和Model是单例的,在这两个层里面一般不会放全局变量,因为这很容易因为多线程造成数据混乱。这时可以用ThreadLocal。

?

public class ShardInfoLocal {

	//这是一个ThreadLocal
	private static final ThreadLocal<ShardInfo> tl = new ThreadLocal<ShardInfoLocal.ShardInfo>();
	
	//设置ThreadLocal
	public static void set(Institutions i){
		ShardInfo si = new ShardInfo();
		si.setPrimaryInstitution(i);
		si.setShards(i.getShardName());
		tl.set(si);
	}
	
	//移除ThreadLocal
	public static void unset(){
		tl.remove();
	}
	
	//获取ThreadLocal
	public static String firstShard(){
		ShardInfo si = tl.get();
		if(si != null){
			return si.getShards()[0];
		}
		return null;
	}
	
	//ThreadLocal要存放的东西
	public static class ShardInfo{
		private Institutions primaryInstitution;
		private String[] shards;
		public Institutions getPrimaryInstitution() {
			return primaryInstitution;
		}
		public void setPrimaryInstitution(Institutions primaryInstitution) {
			this.primaryInstitution = primaryInstitution;
		}
		public String[] getShards() {
			return shards;
		}
		public void setShards(String... shards) {
			this.shards = shards;
		}
	}
}