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

长沙公司网站万网网站空间服务范围

长沙公司网站,万网网站空间服务范围,wordpress关键词设置,营销网站建设的原则前面两篇文章#xff0c;通过两阶段终止的模式进行优雅关闭线程#xff0c;利用数据不变性的方式保证数据安全#xff0c;以及基于COW的模式#xff0c;保证读数据的安全。本篇我们来简述下如果利用线程本地存储的方式保证线程安全。 首先一个大前提就是并发问题#xff…前面两篇文章通过两阶段终止的模式进行优雅关闭线程利用数据不变性的方式保证数据安全以及基于COW的模式保证读数据的安全。本篇我们来简述下如果利用线程本地存储的方式保证线程安全。 首先一个大前提就是并发问题其实就是多个线程之间读写共享数据那么COW是通过将数据读和写分离。而从不共享数据的角度看那么每个线程都存储一份数据。那么就不会存在线程安全。也就是说线程T1维护一个变量i 自己操作而线程T2也维护一个变量i。 T1对i 操作不会影响到T2的i值。 Java中就是通过ThreadLocal的方式实现。 实现原理 具体的工作原理就是线程Thread持有ThreadLocalMap变量而ThreadLocalMap其实是ThreadLocal中的一个静态内部类。而ThreadLocalMap其实就是数组结构key对应的线程this。value对应的是线程设置的值。 public class Thread implements Runnable {/*** ThreadLocal 的 ThreadLocalMap 是线程的一个属性所以在多线程环境下 threadLocals 是线程安全的*/ThreadLocal.ThreadLocalMap threadLocals null;}public class ThreadLocalT {public T get() {// 返回当前 ThreadLocal 所在的线程Thread t Thread.currentThread();// 从线程中拿到 ThreadLocalMapThreadLocalMap map getMap(t);if (map ! null) {// 从 map 中拿到 entryThreadLocalMap.Entry e map.getEntry(this);// 如果不为空读取当前 ThreadLocal 中保存的值if (e ! null) {SuppressWarnings(unchecked)T result (T) e.value;return result;}}// 若 map 为空则对当前线程的 ThreadLocal 进行初始化最后返回当前的 ThreadLocal 对象关联的初值即 valuereturn setInitialValue();}/*** 初始化 ThreadLocalMap并存储键值对 key, value最后返回 value** return value*/private T setInitialValue() {// 获取为 ThreadLocal 对象设置关联的初值T value initialValue();Thread t Thread.currentThread();// 返回当前线程 t 持有的 mapThreadLocalMap map getMap(t);if (map ! null) {map.set(this, value);} else {// 为当前线程初始化 map并存储键值对 t, valuecreateMap(t, value);}return value;}/*** 为当前 ThreadLocal 对象关联 value 值** param value 要存储在此线程的线程副本的值*/public void set(T value) {// 返回当前 ThreadLocal 所在的线程Thread t Thread.currentThread();// 返回当前线程持有的mapThreadLocalMap map getMap(t);if (map ! null) {// 如果 ThreadLocalMap 不为空则直接存储ThreadLocal, T键值对map.set(this, value);} else {// 否则需要为当前线程初始化 ThreadLocalMap并存储键值对 this, firstValuecreateMap(t, value);}}/*** 清理当前 ThreadLocal 对象关联的键值对*/public void remove() {// 返回当前线程持有的 mapThreadLocalMap m getMap(Thread.currentThread());if (m ! null) {// 从 map 中清理当前 ThreadLocal 对象关联的键值对m.remove(this);}}/*** 返回当前线程 thread 持有的 ThreadLocalMap** param t 当前线程* return ThreadLocalMap*/ThreadLocalMap getMap(Thread t) {return t.threadLocals;}所以通过以上的方式可以保证每个线程内部保存一个Map数组但是对应的key确实一个软引用具体的介绍另一篇文章有详细介绍就不说了总体上就是 【Java并发】从simpleDateFormart聊聊threadlocal原理机制 对象的强软弱虚引用threadlocal的原理对象内存泄漏 实际应用 因为threadlocal是和线程绑定的所以可以很自然的就采用在线程级别做一些事情。 1.切换数据库 比如我们在切换数据的时候就可以通过threadlocal进行操作。 比如当前默认就是从库但是想要从主库切到从库上就可以进行通过threadlocal进行使用。 DynamicDataSourceHolder.setDataSourceTypeMaster();boolean updateResult;try {xxxxx // 业务代码} finally {DynamicDataSourceHolder.clearDataSourceType();}public final class DynamicDataSourceHolder {private static ThreadLocalString threadLocal new ThreadLocal();public static int dataSourceMasterSize;public static int dataSourceSlaveSize;private static Random random new Random();private DynamicDataSourceHolder() {}public static String getDataSourceType() {if (null threadLocal.get()) {setDataSourceTypeSlave();}return (String)threadLocal.get();}public static void setDataSourceTypeMaster() {threadLocal.set(MASTER);}public static void setDataSourceTypeSlave() {int randomSlave random.nextInt(dataSourceSlaveSize);threadLocal.set(SLAVE (randomSlave 1));}public static void clearDataSourceType() {threadLocal.remove();} }通过这种方式可以很方便的进行切换数据库。 2.第二种场景 那就是比如我们需要针对线程级别进行添加整个链路的相关信息或者存储相关数据。或者通过AOP注入的方式前后执行一些方法。 好了今天比较简单就到这里。 推荐阅读 保姆级教学22张图揭开ThreadLocal
http://www.dnsts.com.cn/news/202640.html

相关文章:

  • wordpress博客文章加密杭州seo泽成
  • 做水果的网站有哪些网站 横幅
  • 联客易外贸网站建设推广施工企业介绍
  • c2c网站建设需求分析网页设计尺寸适配
  • 顺德网站建设多少钱排名网站优化培训
  • 营销型网站的评价标准孝感织云网站建设
  • 电子商务网站开发环境示范网络营销工作内容和职责
  • asp网站制作任丘网站建设公司
  • 移动网站建设渠道网络推广网上营销
  • 顺义企业建站济南网站建设开发公司哪家好
  • 自己怎么做搬家网站英语不行如何编程做网站
  • 中国建设部官方网站资格证查询微信公众号登录平台入口官网
  • 网站客户留言大数据时代的智能营销
  • 青岛网站建设有限公司桂林北站到阳朔怎么坐车
  • 安徽网站开发公司网站编程入门教程
  • 做类型网站找国外客户用哪个平台
  • 凌晨网站建设公司深圳做营销型网站
  • win7 iis设置网站首页wordpress建站要钱吗
  • 做网站是什么公司短视频舆情
  • 怎么做非法彩票网站吗杭州网站设计开发
  • 怎样在微信中做网站wordpress无法上传
  • 微信手机网站设计专业开发网站设计
  • 网站网站开发建设个人网站要有什么
  • 杭州观建设计网站做网站域名优化的怎么样
  • 打开上次浏览的网站模板网络游戏开发平台
  • 百度微信网站东莞市人力资源网官网
  • 重庆做网站做得好的公司高级网站设计效果图
  • 制作触屏版网站开发传媒公司制作网站
  • 如何建设网站建设郑州手机网站建设多少钱
  • 黑色网站模版wish跨境电商平台