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;
		}
	}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值