转载自 https://blog.csdn.net/maosijunzi/article/details/18561107

线程封闭

实现好的并发是一件困难的事情,所以很多时候我们都想躲避并发。避免并发最简单的方法就是线程封闭。什么是线程封闭呢?
就是把对象封装到一个线程里,只有这一个线程能看到此对象。那么这个对象就算不是线程安全的也不会出现任何安全问题。实现线程封闭有哪些方法呢?

1:ad-hoc线程封闭

这是完全靠实现者控制的线程封闭,他的线程封闭完全靠实现者实现。也是最糟糕的一种线程封闭。所以我们直接把他忽略掉吧。

2:栈封闭

栈封闭是我们编程当中遇到的最多的线程封闭。什么是栈封闭呢?简单的说就是局部变量。多个线程访问一个方法,此方法中的
局部变量都会被拷贝一分儿到线程栈中。所以局部变量是不被多个线程所共享的,也就不会出现并发问题。所以能用局部变量就别用全局的变量,全局变量容易引起并发问题。

3:ThreadLocal封闭

使用ThreadLocal是实现线程封闭的最好方法,有兴趣的朋友可以研究一下ThreadLocal的源码,其实ThreadLocal内部维护了一个Map,Map的key是每个线程的名称,而Map的值就是我们要封闭的对象。每个线程中的对象都对应着Map中一个值,也就是ThreadLocal利用Map实现了对象的线程封闭。这里就不说ThreadLocal的使用方法了,度娘一下便知。

总之,当我们要用线程封闭来避免并发问题的时候,最好使用的就是 【栈封闭】 和 【ThreadLocal】。

java并发之线程封闭(二)相关推荐

  1. 并发之线程封闭与ThreadLocal解析

    并发之线程封闭与ThreadLocal解析 什么是线程封闭 实现一个好的并发并非易事,最好的并发代码就是尽量避免并发.而避免并发的最好办法就是线程封闭,那什么是线程封闭呢? 线程封闭(thread c ...

  2. java 封闭类型_Java并发之线程封闭

    读者们好! 在这篇博客中,我们将探讨线程封闭是什么意思,以及我们如何实现它. 所以,让我们直接开始吧. 1. 线程封闭 大多数的并发问题仅发生在我们想要在线程之间共享可变变量或可变状态时.如果在多个线 ...

  3. Java多线程之线程封闭(三)

    线程封闭的概念 访问共享变量时,通常要使用同步,所以避免使用同步的方法就是减少共享数据的使用,这种技术就是线程封闭. 实现线程封闭的方法 1:ad-hoc线程封闭 这是完全靠实现者控制的线程封闭,他的 ...

  4. Java并发之线程池ThreadPoolExecutor源码分析学习

    线程池学习 以下所有内容以及源码分析都是基于JDK1.8的,请知悉. ​ 我写博客就真的比较没有顺序了,这可能跟我的学习方式有关,我自己也觉得这样挺不好的,但是没办法说服自己去改变,所以也只能这样想到 ...

  5. java并发之线程池

    文章目录 @[TOC] 1:ThreadPoolExcutor (1):ThreadPoolExcutor构造函数 (2):构造函数的参数 (3):图示 核心线程数 最大线程数 阻塞队列 (4):一个 ...

  6. Java 并发之线程池学习

    2019独角兽企业重金招聘Python工程师标准>>> 创建 通过ThreadPoolExecutor来创建一个线程池 new ThreadPoolExecutor(corePool ...

  7. java并发之线程安全---java并发编程实践

    2019独角兽企业重金招聘Python工程师标准>>> 当多个线程访问同一个类时,如果不用考虑这些线程在运行时环境下的调度和交替执行,并且不需要额外的同步及在调用方代码不必做其他的协 ...

  8. Java 并发编程(二)对象的发布逸出和线程封闭

    对象的发布与逸出 "发布(Publish)"一个对象是指使对象能够在当前作用域之外的代码中使用.可以通过 公有静态变量,非私有方法,构造方法内隐含引用 三种方式. 如果对象构造完成 ...

  9. 聊聊高并发(二)结合实例说说线程封闭和背后的设计思想

    高并发问题抛去架构层面的问题,落实到代码层面就是多线程的问题.多线程的问题主要是线程安全的问题(其他还有活跃性问题,性能问题等). 那什么是线程安全?下面这个定义来自<Java并发编程实战> ...

最新文章

  1. 怎么接收layui上传的文件_layui 上传文件_批量导入数据UI的方法
  2. Spring Boot 整合 Freemarker
  3. mysql 逻辑架构
  4. golang匿名组合
  5. java文件不存在就创建_Java中创建并写文件的5种方式
  6. linux-centos7 常用的基本命令--目录管理、基本属性
  7. python logger_牛逼!python中的logging模块居然这么好用!
  8. Mac OS X 11中的/usr/bin 的“Operation not permitted”
  9. 【iOS】Touch Up Inside 和 Touch Up Outside 的区别
  10. 使用原生XMLHttpRequest对象演示ajax(Ajax)功能
  11. python多元非线性回归模型_Python 非线性回归 - 树懒学堂
  12. 搭建企业级数据治理体系指南
  13. PyCharm的Requirement already satisfied 解决方法
  14. 个人理财类书籍推荐 -- From一亩三分地 帖子
  15. H3 R4900 G3装系统详细步骤
  16. 数据中台当前与未来-数字化架构设计(1)
  17. vue3 如何给动态渲染的组件添加ref
  18. 详解input value属性
  19. 万人千题第一阶段报告【待继续总结】
  20. QLineEdit setFocus失效问题

热门文章

  1. (十一)boost库之多线程间通信
  2. WinDbg学习笔记(二)--字符串访问断点
  3. static_cast, dynamic_cast, const_cast学习和探讨
  4. WebRTC 的音频处理流水线
  5. C++ 智能指针 :内存泄漏、 RAII、智能指针、auto_ptr、unique_ptr、shared_ptr、weak_ptr、定制删除器deleter
  6. C语言程序设计 | 结构体内存对齐,位段
  7. 一道非常经典C++面试题|大厂面试
  8. Kafka最全面试题整理|划重点要考
  9. 与WebXR共同创建者Diego Marcos一起探讨沉浸式Web的未来(下)
  10. 【全链路质量监控与QoE】