当前位置: 首页 > news >正文

asp建设网站需要了解什么建网站衡水哪家强?

asp建设网站需要了解什么,建网站衡水哪家强?,wordpress留言,域名备案网站购买首先看下ThreadLocal的set()方法存数据的过程#xff0c;首先获取当前的线程中保持的ThreadLocalMap#xff0c;每个线程的ThreadLocalMap都是不一样的#xff0c;因此存储的值是不同的。 public void set(T value) {Thread t Thread.currentThread();ThreadLocalMap map …首先看下ThreadLocal的set()方法存数据的过程首先获取当前的线程中保持的ThreadLocalMap每个线程的ThreadLocalMap都是不一样的因此存储的值是不同的。 public void set(T value) {Thread t Thread.currentThread();ThreadLocalMap map getMap(t);if (map ! null) {map.set(this, value);} else {createMap(t, value);}}如果在一个线程中首次使用ThreadLocal保持数据则需要创建ThreadLocalMapThreadLocalMap中保存数据的实体是Entry保存数据的过程就是先计算这个ThreadLocal对象的hashcode根据hashcode计算在Entry数组中的位置然后将创建的Entry保存在这个位置。 void createMap(Thread t, T firstValue) {t.threadLocals new ThreadLocalMap(this, firstValue);}ThreadLocalMap(ThreadLocal? firstKey, Object firstValue) {table new Entry[INITIAL_CAPACITY];int i firstKey.threadLocalHashCode (INITIAL_CAPACITY - 1);table[i] new Entry(firstKey, firstValue);size 1;setThreshold(INITIAL_CAPACITY);}如果在第一次之后使用ThreadLocal的话则根据ThreadLocal计算hashcode再根据hashcode计算Entry数组的索引根据索引找到这个线程对应的Entry如果是当前线程使用的ThreadLocalif (k key)则将对象设置进来即写到存储数据的Entry中。 private void set(ThreadLocal? key, Object value) {Entry[] tab table;int len tab.length;int i key.threadLocalHashCode (len-1);for (Entry e tab[i];e ! null;e tab[i nextIndex(i, len)]) {ThreadLocal? k e.get();if (k key) {e.value value;return;}if (k null) {replaceStaleEntry(key, value, i);return;}}tab[i] new Entry(key, value);int sz size;if (!cleanSomeSlots(i, sz) sz threshold)rehash();}当通过get()方法获取数据时首先找到当前的线程对象获取线程对象内部的ThreadLocalMap然后根据ThreadLocal对象计算Entry的索引找到本线程存储数据的Entry获取Entry中的数据。 public T get() {Thread t Thread.currentThread();ThreadLocalMap map getMap(t);if (map ! null) {ThreadLocalMap.Entry e map.getEntry(this);if (e ! null) {SuppressWarnings(unchecked)T result (T)e.value;return result;}}return setInitialValue();}private Entry getEntry(ThreadLocal? key) {int i key.threadLocalHashCode (table.length - 1);Entry e table[i];if (e ! null e.get() key)return e;elsereturn getEntryAfterMiss(key, i, e);}ThreadLocal内存泄漏的问题 可以看到Entry是指向ThreadLocal的弱引用弱引用不会阻止gc的垃圾回收如果这个ThreadLocal对象置为null指向ThreadLocal对象的弱引用不会阻止gc的垃圾回收此时ThreadLocal对象存在但是无法访问通过get()方法获取value时需要计算ThreadLocal对象的hashcode在ThreadLocal对象被回收的情况就无法计算hashcode也就无法访问这个value引用的对象造成内存泄漏了。 static class Entry extends WeakReferenceThreadLocal? {/** The value associated with this ThreadLocal. */Object value;Entry(ThreadLocal? k, Object v) {super(k);value v;}}解决方法 将ThreadLocal变量定义成private static这样就一直存在ThreadLocal的强引用可以通过ThreadLocal对象访问到保存的数据不会造成内存泄漏调用remove()方法清除内存 public void remove() {ThreadLocalMap m getMap(Thread.currentThread());if (m ! null) {m.remove(this);}}private void remove(ThreadLocal? key) {Entry[] tab table;int len tab.length;int i key.threadLocalHashCode (len-1);for (Entry e tab[i];e ! null;e tab[i nextIndex(i, len)]) {if (e.get() key) {e.clear();expungeStaleEntry(i);return;}}}
http://www.hkea.cn/news/14328753/

相关文章:

  • 网站网站到底怎么做服装外贸公司大量订单外发
  • 公司设计一个网站揭阳企业建站系统模板
  • 濮阳团购网站建设安卓android下载安装
  • 个人做网站花多少钱企业网站模板中文
  • 做情趣网站违法吗域名哪里注册
  • 看案例网站做平面设计需要学什么软件
  • 木马网站怎么做网站建设教程asp
  • 网站开发项目文档南山做网站公司
  • 网站开发费用算无形资产么哈尔滨网站设计多少钱
  • 响应式网站建设系统好业宝微商城
  • 达川网站制作南宁模板建站
  • 专业网站建设策划西安搬家公司收费标准
  • 深圳市网站制作网站建设解决方案
  • 做地推的网站桂林建设银行招聘网站
  • 做电影网站 资源去哪里找怎么设置自己的网站
  • 程序员做任务的网站空间设计公司网站
  • 丹阳网站建设公司阿里云wordpress数据库
  • 网站建设流程行业现状如何代做网站
  • 珠海网页模板建站大型菜谱网站建设
  • 电子商务网站的建设开发工具wordpress 插件 教程视频
  • 潍坊昌大建设集团有限公司网站kol营销模式
  • 网站设置默认首页网络营销案例具体分析
  • js做示爱网站例子品牌推广广告
  • 合肥专业做网站的怎样建设一个网站教学设计
  • 泉州手机网站建设自己网站怎么推广
  • 虚拟主机对网站seo有哪些影响百度一下你就知道官网首页
  • 找人代做网站需要注意什么家具设计理念
  • 通过高新区网站建设贵州三蒲建设工程有限公司网站
  • php做商城网站建设如何查看网站根目录
  • 网站推广的作用在哪里鹤岗北京网站建设