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

asp.net网站开发实例教程pdf泉州seo网站关键词优推广

asp.net网站开发实例教程pdf,泉州seo网站关键词优推广,功能多的免费网站建设,莆田做网站价格文章目录 exampleset(T value)createMap(t, value);set(ThreadLocal? key, Object value)ThreadLocalMap和Thread的关系 全貌 ThreadLocal是个很重要的多线程类#xff0c;里面数据结构的设计很有意思#xff0c;很巧妙。但是我们平时使用它的时候常常容易对它的使用… 文章目录 exampleset(T value)createMap(t, value);set(ThreadLocal? key, Object value)ThreadLocalMap和Thread的关系 全貌 ThreadLocal是个很重要的多线程类里面数据结构的设计很有意思很巧妙。但是我们平时使用它的时候常常容易对它的使用感到迷惑因为它跟其它的API很不一样使用很不一样设计也很不一样。 但是不用担心这篇文章将从源码出发一步步深入剖析ThreadLocal内部构造理清楚它的来龙去脉。 example 还是从一个使用用例出发 public class ThreadLocalExample {// 声明一个 ThreadLocal 变量private static ThreadLocalInteger threadLocal new ThreadLocal();public static void main(String[] args) {// 在主线程中设置变量值threadLocal.set(10);// 创建并启动一个新线程Thread thread new Thread(() - {// 在新线程中获取变量值System.out.println(ThreadLocal value in new thread: threadLocal.get());});thread.start();// 在主线程中获取变量值System.out.println(ThreadLocal value in main thread: threadLocal.get());} } 打印结果 ThreadLocal value in main thread: 10 ThreadLocal value in new thread: null可以看出同一个threadLocal 对象在不同的线程里面调用get方法获取的是不一样的结果也就是说threadLocal 对象存储了不同线程的私有变量。 现在可能我们还是觉得云里雾里那现在我们就从源码出发来一步步进行分析。 从threadLocal.set(10);方法进去 set(T value) /*** Sets the current threads copy of this thread-local variable* to the specified value. Most subclasses will have no need to* override this method, relying solely on the {link #initialValue}* method to set the values of thread-locals.** param value the value to be stored in the current threads copy of* this thread-local.*/public void set(T value) {Thread t Thread.currentThread();ThreadLocalMap map getMap(t);if (map ! null)map.set(this, value);elsecreateMap(t, value);}创建map或者设置keyvalue。 createMap(t, value); 先来看看假如mapnull它怎么做 /*** Create the map associated with a ThreadLocal. Overridden in* InheritableThreadLocal.** param t the current thread* param firstValue value for the initial entry of the map*/void createMap(Thread t, T firstValue) {t.threadLocals new ThreadLocalMap(this, firstValue);}这里把new出来的ThreadLocalMap赋值给了t.threadLocalst是个线程。 /*** Construct a new map initially containing (firstKey, firstValue).* ThreadLocalMaps are constructed lazily, so we only create* one when we have at least one entry to put in it.*/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);}这里是ThreadLocalMap的构造方法可以看出ThreadLocal作为key传进来的参数作为value。 set(ThreadLocal? key, Object value) 现在回退一下看看map.set(this, value);做了什么 /*** Set the value associated with key.** param key the thread local object* param value the value to be set*/private void set(ThreadLocal? key, Object value) {// We dont use a fast path as with get() because it is at// least as common to use set() to create new entries as// it is to replace existing ones, in which case, a fast// path would fail more often than not.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();}这里有必要知道的是该方法位于ThreadLocalMap类里面 看下Entry 的实现代码 /*** The entries in this hash map extend WeakReference, using* its main ref field as the key (which is always a* ThreadLocal object). Note that null keys (i.e. entry.get()* null) mean that the key is no longer referenced, so the* entry can be expunged from table. Such entries are referred to* as stale entries in the code that follows.*/static class Entry extends WeakReferenceThreadLocal? {/** The value associated with this ThreadLocal. */Object value;Entry(ThreadLocal? k, Object v) {super(k);value v;}}Entry 是个弱引用的子类。设计为弱引用说明它跟内存泄漏有关。这里先不深入探讨。 到这里我们可以得知set方法执行的时候以ThreadLocal对象作为key以value入参作为value传到了ThreadLocal的 Entry[] 里面设置的时候根据threadLocal对象的hash值来确定其在ThreadLocalMap中的位置。 ThreadLocalMap和Thread的关系 还记得前面的这行代码吗 t.threadLocals new ThreadLocalMap(this, firstValue);它createMap(t, value);里面来看看ThreadLocalMap和Thread的关系 java/lang/Thread.java /* ThreadLocal values pertaining to this thread. This map is maintained* by the ThreadLocal class. */ThreadLocal.ThreadLocalMap threadLocals null;也就是说ThreadLocalMap 其实是属于线程的成员变量。 全貌 其实到这里我们已经有能力知道整体的数据结构的设计了下面我们通过前面给出的example代码通过画图的方式把它们之间关系全貌绘制出来 ThreadLocalMap里面是Entry数组那么其它Entry元素怎么用呢 这是个好问题我们迭代下前面的example class ThreadLocalExample {// 声明一个 ThreadLocal 变量private static ThreadLocalInteger threadLocal new ThreadLocal();private static ThreadLocalString threadLocal2 new ThreadLocal();public static void main(String[] args) {// 在主线程中设置变量值threadLocal.set(10);threadLocal2.set(hello);// 创建并启动一个新线程Thread thread new Thread(() - {// 在新线程中获取变量值System.out.println(ThreadLocal value in new thread: threadLocal.get());System.out.println(ThreadLocal2 value in new thread: threadLocal2.get());});thread.start();// 在主线程中获取变量值System.out.println(ThreadLocal value in main thread: threadLocal.get());System.out.println(ThreadLocal2 value in main thread: threadLocal2.get());} }运行结果 ThreadLocal value in main thread: 10 ThreadLocal value in new thread: null ThreadLocal2 value in main thread: hello ThreadLocal2 value in new thread: null再来一个图 一图胜千言到这里我们应该对ThreadLocal这个线程类的整体有个清晰的把握了。 enjoy it。
http://www.w-s-a.com/news/589127/

相关文章:

  • 怎样建立一个企业网站dede 网站名称
  • 做网上竞彩网站合法吗免费网站建设品牌
  • 网站开发所需要的的环境客户关系管理的内涵
  • 优质做网站公司做软件的人叫什么
  • 徐州市徐州市城乡建设局网站首页网站建设刂金手指下拉十五
  • 建设游戏网站目的及其定位市场营销策略概念
  • 小学电教检查网站建设资料wordpress谷歌字体
  • 南通做网站的公司有哪些中国建筑论坛网
  • 技术支持 佛山网站建设wordpress不用ftp
  • 广州定制app开发wordpress配置搜索引擎优化
  • 兰州网站建设论坛四川建设网官网登录
  • 在线作图免费网站湖南批量出品机
  • 深圳做网站公司有哪些地方妇联加强网站平台建设
  • vps建设网站别人访问不了网页链接生成器
  • 网站建设一般要多少钱电商平台取名字大全
  • 怎么做网站封面上的图网站开发语言 微信接口
  • 免费观看网站建设优化安徽
  • 上海电商网站开发公司做婚恋网站的翻译好吗
  • 以网站建设为开题报告大数据技术就业前景
  • dw做网站字体 别人电脑显示青岛活动策划公司
  • 网站成立时间查询墨猴seo排名公司
  • 技术支持 随州网站建设苏州企业网站建设定制
  • 美食网站开发目的与意义网站开发环境选择
  • 青岛西海岸新区城市建设局网站开发板在null不可用
  • 企业信息管理系统免费seo优化个人博客
  • 做任务的设计网站泰州哪里做网站
  • 什么网站可以做设计赚钱吗南京十大软件公司排名
  • 网站开发时间进度北京有哪些著名网站
  • 深圳比较好的设计网站公司自己的网站到期域名如何续费
  • 温州做网站哪儿新云网站模版