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

网站自动跳转怎么办什么是网站的二级目录

网站自动跳转怎么办,什么是网站的二级目录,石家庄做网站 vtkj,安卓优化大师手机版下载1.前言 在面的线程安全相关的博文中,解决线程安全问题的方法主要使用synchronized和volatile两个关键字。引发线程安全问题的根本原因是多个线程同时对共享变量进行写操作,而上述两个关键字并没有改变"多个线程写同一个变量"这个情况。以sync…

1.前言

在面的线程安全相关的博文中,解决线程安全问题的方法主要使用synchronizedvolatile两个关键字。引发线程安全问题的根本原因是多个线程同时对共享变量进行操作,而上述两个关键字并没有改变"多个线程同一个变量"这个情况。以synchronized为例,当某一线程访问上锁的变量时,其他线程只能等待该线程释放锁,使用synchronized会一定程度上影响性能(即便使用了锁升级策略),本质上还是"多个线程同一个变量"。本文介绍的ThreadLocal就是解决这一问题的

2 ThreadLocal

2.1 概念&作用

概念:ThreadLocal是Java中的一个2工具类。它提供了线程局部变量,每个线程访问ThreadLocal变量时,都有自己独立的副本且该变量副本只能有当前线程使用
作用

  • 避免线程之间的数据共享,从而保证了线程安全
  • 避免使用synchronized带来的性能开销

示例一在这里插入图片描述
示例二在这里插入图片描述

2.2 ThreadLocal实现原理

2.2.1 public void set(T value)方法

在这里插入图片描述

由上面的源码可知,threadLocal调用set方法时,先获取到当前线程,再获取到当前线程维护的ThreadLocalMap(第一次获取时为null)

ThreadLocalMap是什么?
ThreadLocalMap是ThreadLocal类中定义的内部类,可以理解为一张哈希表,表中又定义了一个内部类Entry。Entry是一个键值对,其中key是当前的threadLocal对象的引用,value是要存放到值。
每个线程(Thread)内部都会维护一个ThreadLocalMap类型的变量threadLocals(初始为null)
在这里插入图片描述
其中,key引用是弱引用,value是强引用。如果一个对象只有弱引用指向,那么下一次GC(垃圾回收)的时候就会将该对象回收掉

下面是Thread,ThreadLocal,ThreadLocalMap的栈堆位置关系图
在这里插入图片描述
下面是ThreadLocal对象调用set方法的全流程
在这里插入图片描述

2.2.2 public T get()方法

在这里插入图片描述

获取value的时候也是先获取到当前的线程,只有自己set的值,这时候才能get到;如果该线程没有调用set方法而先调用get方法,就会调用setInitialValue()方法得到一个初始值(默认为null)
在这里插入图片描述
不过setInitialValue()方法可以重写,设置一个用户想要的初始值

在这里插入图片描述

3 ThreadLocal引发的内存泄漏

3.1ThreadLocal 内存泄露的原因

前面已经有所提及,Thread维护的ThreadLocalMap中,key引用是一个弱引用,如果不存在其他强引用,那么key指向的ThreadLocal对象就会被GC回收掉
在这里插入图片描述
如果栈中的ThreadLocal强引用被销毁了,那么ThreadLocal对象只剩下一个弱引用,下一次ThreadLocal对象会被回收掉。但是ThreadLocalMap中的key弱引用不会被回收,ThreadLocalMap被线程中的threadLocals引用指向,这是一个强引用,只要线程不结束,ThreadLocalMap就不会销毁,key也就不会被销毁。换言之,key的生命周期和当前线程一致,不过此时key弱引用的指向为null,那么key对应的value就无法被获取到,并且也不会被回收。
如果ThreadLocal对象搭配线程池一起使用,那么内存泄漏问题就更应该值得注意,因为线程池的思想就是线程复用,即便当前没有任务可执行,线程池中的核心线程会一直存在,而ThreadLocal对象大概率不能一直存在,这就导致线程中的ThreadLocalMap中的value就无法被获取到。如果无法被访问的value越来越多,就可能导致内存不够用,所以当ThreadLocal使用完毕时,及时调用remove()方法将对应的Entry移除掉

3.2 正确使用ThreadLocal的方式

1.如果ThreadLocal要用很久,将ThreadLocal强引用使用static修饰,延长强引用的生命周期

//这样做的意思是,告诉  JVM  ThreadLocal对象我要用很久,你别给我回收了
//保证线程中维护的ThreadLocalMap中的key能访问到对应的value
private static final ThreadLocal<String> threadLocal = new ThreadLocal<String>();

2.如果ThreadLocal不怎么用,及时调用remove()方法将对应的Entry移除掉

key引用能不能是强引用?

答:不能,如果key也是一个强引用,当栈上的ThreadLocal引用销毁的时候,因为key是一个强引用,那么堆中的ThreadLocal对象也不会被回收,内存泄漏问题更加严重


文章转载自:

http://cRsSJ3fD.qhnmj.cn
http://XLJC5taO.qhnmj.cn
http://3b8FtDmC.qhnmj.cn
http://5fiZD32s.qhnmj.cn
http://it7Bgp7U.qhnmj.cn
http://BmPHyA5A.qhnmj.cn
http://M3lr2vlP.qhnmj.cn
http://pZUgFSth.qhnmj.cn
http://NeGYoGIP.qhnmj.cn
http://yokN7Wf4.qhnmj.cn
http://hjtTcD6i.qhnmj.cn
http://vdbwHdU1.qhnmj.cn
http://JsCkP2gv.qhnmj.cn
http://qFK03DtE.qhnmj.cn
http://Jz6AIwj2.qhnmj.cn
http://BP3HCFwG.qhnmj.cn
http://p2sAcK13.qhnmj.cn
http://1uPjbOCD.qhnmj.cn
http://urant9H0.qhnmj.cn
http://YifyAX4b.qhnmj.cn
http://8LcSM5C2.qhnmj.cn
http://tpw2qfrX.qhnmj.cn
http://hRvAIyJc.qhnmj.cn
http://wf2d4jmc.qhnmj.cn
http://re4Uh0T4.qhnmj.cn
http://LNSgoOx8.qhnmj.cn
http://wF3ridB6.qhnmj.cn
http://3LA5pUbc.qhnmj.cn
http://AyRNMevr.qhnmj.cn
http://JIJI6X2c.qhnmj.cn
http://www.dtcms.com/wzjs/644623.html

相关文章:

  • 手机站网站布局怎么搞一个网站平台
  • 南京网站制作哪家专业付费链接生成软件
  • 温州网站 公司著名建筑网站
  • 美食网站建设背景免费建站手机软件
  • 浙江网站建设方案优化iis建设网站
  • 网站建设中网站功能描述书功能网络推广平台在哪里有
  • 网站下载的软件怎么安装珠海市做网站
  • 做3d办公家具教程的网站工业设计公司有哪些
  • 怎么免费建设自己网站企业网站备案怎么填写
  • 2003访问网站提示输入用户名密码景县做个油管的网站怎么做
  • 网站开发的经验工业品企业网站源码
  • 做网站需要续费吗学前教育网站建设
  • 九江网站开发网站建设 三牛
  • 有做国际网站生意吗网站建设小企业案例
  • 网站从新建设影响收录么江苏市场监督管理局电话
  • 苏州建网站的公司哪家口碑好收银系统软件一套多少钱
  • 高端网站建设服务器广州企业建站 网络服务
  • 东莞网站制作公司报价企业163邮箱登录
  • 百度推广帮做网站玉环做企业网站
  • 茂名网站建设建站系统天眼网
  • 外网网址可以做英语阅读的网站个人电脑建网站
  • 购物网站修改文案网站需要数据库
  • 佛山网站设计哪家便宜万户网络是干什么的
  • 网站建设材料汇报网店营销推广实训平台
  • 建筑资质查询官方网站广告设计公司广告设计
  • 网站建设内容录入论文做网站 怎么提升浏览量
  • 丽水网站开发公司电话山西龙采网站建设合同
  • 国外做测评的网站有哪些万户网络网站建设
  • 潍坊网站建设哪家好wordpress超简洁主题
  • 网站开发需求统计wordpress 忘记数据库密码