千锋教育-做有情怀、有良心、有品质的职业教育机构

当前位置:首页  >  IT面试题  >  大数据面试题  >  正文

threadlocal原理

来源:千锋教育
发布时间:2022-09-26 11:47:00
分享

  ThreadLocal就是一种以**空间换时间**的做法,在每个Thread里面维护了一个以开地址法实现的ThreadLocal.ThreadLocalMap,把数据进行隔离,数据不共享,自然就没有线程安全方面的问题了

threadlocal原理

  4.1实际通过ThreadLocal创建的副本是存储在每个线程自己的threadLocals中的;

  4.2.为何threadLocals的类型ThreadLocalMap的键值为ThreadLocal对象,因为每个线程中可有多个threadLocal变量;

  4.3.在进行get之前,必须先set,否则会报空指针异常;

  因为在上面的代码分析过程中,我们发现如果没有先set的话,即在map中查找不到对应的存储,则会通过调用setInitialValue方法返回i,而在setInitialValue方法中,有一个语句是T value = initialValue(), 而默认情况下,initialValue方法返回的是null。

  4.4 如果想在get之前不需要调用set就能正常访问的话,必须重写initialValue()方法。

声明:本站稿件版权均属千锋教育所有,未经许可不得擅自转载。

相关推荐

  • 请列举几个常用的Linux命令 man :帮助命令 sudo : 获取root权限 jps : 查看java进程 ps -ef : 查看进程 ps -aux : 查看进程 netstat -nltcp : 监听端口 free : 内存查看 top :动态 查看服务器资源信息
  • 单利模式是什么,线程安全吗? 也就是说通过单例我们可以实现数据的全局访问,还可以再全局实现功能的调用.单例分成懒汉式和饿汉式,对于懒汉式会有线程安全问题,需要进行同步处理,对于饿汉式不会有线程安全问题,不需要同步.
  • nio和bio的区别,为啥nio好 同步阻塞IO(JAVA BIO/Blocking IO ): 同步并阻塞,服务器实现模式为一个连接一个线程,即客户端有连接请求时服务器端就需要启动一个线程进行处理,如果这个连接不做任何事情会造成不必要的线程开销.
  • threadlocal原理 因为在上面的代码分析过程中,我们发现如果没有先set的话,即在map中查找不到对应的存储,则会通过调用setInitialValue方法返回i,而在setInitialValue方法中,有一个语句是T value = initialValue(), 而默认情况下,init...
  • arrayList和LinkedList的区别 Linkedlist基于链表的动态数组,数据添加删除效率高,只需要改变指针指向即可,但是访问数据的平均效率低,需要对链表进行遍历。对于新增和删除操作add和remove,LinedList比较占优势,因为ArrayList要移动数据。
  • 垃圾回收机制(算法原理) 复制清除法:将内存分为两块,其中一块写满后,遍历对象标记有用的对象复制到另一块,然后把这一块清理,这样复制的内容很少而且内存始终连续,缺点是始终需要有一块内存空出来用于复制。