private static final ThreadLocal<Map<String,String>> threadLocal = new ThreadLocal<>(); public static void map(Map<String,String> map){ threadLocal.set(map); } // 获取用户id public static String userId(){ return ge
AI代码解释 staticclassEntryextendsWeakReference<ThreadLocal<?>>{/** The value associated with this ThreadLocal. */Object value;Entry(ThreadLocal<?>k,Object v){super(k);value=v;}} 可以看到,Entry类继承了WeakReference类,WeakReference类的泛型是ThreadLocal,,说明ThreadLocalMap中的Entry数组对Entry对象的...
AI代码解释 packagecom.test;publicclassMySession{publicstaticfinal ThreadLocal<MyDao>session=newInheritableThreadLocal<MyDao>();}publicclassMyDao{publicstaticLog2ContextgetInstance(){MyDao myDao=null;// 创建当前线程的myDao对象myDao=MySession.session.get();if(myDao==null){myDao=newMyDao();My...
}// ThreadLocal的hashCode在创建对象时设置,用于计算Entry[]下标privatefinalintthreadLocalHashCode=nextHashCode();privatestaticAtomicIntegernextHashCode=newAtomicInteger();// 固定值2 ^ 32 * 0.6180339887(黄金分割点)privatestaticfinalintHASH_INCREMENT=0x61c88647;// Fibonacci散列函数privatestaticintnextHashCode()...
2、使用ThreadStaticAttribute标记的static字段不会在线程之间共享。每个执行线程都有单独的字段实例,并分别设置和获取该字段的值。如果在不同的线程上访问该字段,则该字段将包含不同的值。 3、请注意,除了将特性应用于ThreadStaticAttribute字段外,还必须将其定义为 c # 中的static字段 ...
1 static 防止无意义多实例 2当static时,ThreadLocal ref生命延长-ThreadMap的key在线程生命期内始终有值-ThreadMap的value在线程生命期内不释放——故线程池下,static修饰TrheadLocal引用,必须(1)remove 或(2)手动 ThreadLocal ref = null 两个例子:
private static AtomicInteger nextHashCode = new AtomicInteger(); //增长步长 private static final int HASH_INCREMENT = 0x61c88647; //获取哈希值 private static int nextHashCode() { return nextHashCode.getAndAdd(HASH_INCREMENT); } nextIndex是获取下一个下标,超出上限时回到0 ...
static class ThreadLocalMap { static class Entry extends WeakReference<ThreadLocal<?>> { /** The value associated with this ThreadLocal. */ Object value; Entry(ThreadLocal<?> k, Object v) { super(k); value = v; } } } 1. 2. ...
staticclassEntryextendsWeakReference<ThreadLocal>{ /**ThevalueassociatedwiththisThreadLocal.*/ Objectvalue; Entry(ThreadLocalk,Objectv){ super(k); value=v; } } 注意了! Entry继承自WeakReference(弱引用,生命周期只能存活到下次GC前),但只有Key是弱引用类型的,Value并非弱引用。(问题马上就来了) ...
> k, Object v) { super(k);value = v;} } 既然是map结构,那么就存在避免碰撞的问题,这个是如何解决的呢,在TreadLocal的解决方案如下:private static AtomicInteger nextHashCode =new AtomicInteger();private static final int HASH_INCREMENT = 0x61c88647;private static int nextHashCode() { return...